JEST STYLED 组件 - 未找到 toHaveStyleRule 属性
JEST STYLED COMPONENTS - toHaveStyleRule didn't find property
我正在尝试测试我的样式组件。
因此我安装了 jest-styled-components
.
我想测试一下,如果我的组件在点击后改变不透明度。
我用 toHaveStyleRule
试过了。但它说:
Property not found: "opacity"
所以这是我的样式组件:
const ClueAnswer = styled.h3`
transition: opacity 1s;
transition-timing-function: ${props => props.reveal ? 'ease-out' : 'ease-in' };
opacity: ${props => props.reveal ? 1 : 0};
cursor: pointer;
`;
ClueAnswer.displayName = 'ClueAnswer';
export { ClueAnswer };
我将它导入这里:
// Vendor
import React, { Component } from 'react';
// Styled Components
import {
ClueAnswer,
ClueWrapper
} from '../style/general';
class Clue extends Component {
constructor(props) {
super(props);
this.state = {
reveal: false
};
}
render() {
const { clue } = this.props;
return (
<ClueWrapper>
<h3>Difficulty: { clue.value }</h3>
<hr />
<p>{ clue.question }</p>
<hr />
<ClueAnswer
reveal={ this.state.reveal }
onClick={ () => this.setState(prevState => { return { reveal: !prevState.reveal } }) }>{ clue.answer }</ClueAnswer>
</ClueWrapper>
);
}
}
export default Clue;
我的 setupTest.js
文件如下所示:
// Polyfill
import raf from './polyfill';
// Vendor
import { configure } from 'enzyme';
import Adapter from 'enzyme-adapter-react-16';
import 'jest-styled-components';
configure({ adapter: new Adapter() });
最后是我的测试文件:
// Vendor
import React from 'react';
import { shallow } from 'enzyme';
// Component
import Clue from './clue';
// Fixtures
import { clue } from '../data/fixtures';
const props = { clue };
describe('Clue Component', () => {
const clueWrapper = shallow(<Clue { ...props } />);
describe('and behavior on click', () => {
const ClueAnswer = clueWrapper.find('ClueAnswer');
const revealBeforeClick = clueWrapper.state('reveal');
let revealAfterClick;
beforeAll(() => {
ClueAnswer.simulate('click');
revealAfterClick = clueWrapper.state('reveal');
});
it('toggles reveal state on click', () => {
expect(revealBeforeClick).not.toBe(revealAfterClick);
});
it('changes the opacity on click', () => {
console.log(clueWrapper.debug());
console.log(ClueAnswer.props());
expect(ClueAnswer).toHaveStyleRule('opacity', 1);
});
});
});
clueWrapper.debug()
的调试如下所示:
<styled.div>
<h3>
Difficulty:
200
</h3>
<hr />
<p>
q one
</p>
<hr />
<ClueAnswer reveal={true} onClick={[Function]}>
a one
</ClueAnswer>
</styled.div>
我希望从 toHaveStyleRule
获得不透明度的当前值,但我却遇到了所描述的问题。
有人有提示吗?
此致
问题在于,当仅使用 shallow
渲染父组件时,ClueAnswer
并未真正渲染。使用 mount
也应该强制渲染 ClueAnswer
我正在尝试测试我的样式组件。
因此我安装了 jest-styled-components
.
我想测试一下,如果我的组件在点击后改变不透明度。
我用 toHaveStyleRule
试过了。但它说:
Property not found: "opacity"
所以这是我的样式组件:
const ClueAnswer = styled.h3`
transition: opacity 1s;
transition-timing-function: ${props => props.reveal ? 'ease-out' : 'ease-in' };
opacity: ${props => props.reveal ? 1 : 0};
cursor: pointer;
`;
ClueAnswer.displayName = 'ClueAnswer';
export { ClueAnswer };
我将它导入这里:
// Vendor
import React, { Component } from 'react';
// Styled Components
import {
ClueAnswer,
ClueWrapper
} from '../style/general';
class Clue extends Component {
constructor(props) {
super(props);
this.state = {
reveal: false
};
}
render() {
const { clue } = this.props;
return (
<ClueWrapper>
<h3>Difficulty: { clue.value }</h3>
<hr />
<p>{ clue.question }</p>
<hr />
<ClueAnswer
reveal={ this.state.reveal }
onClick={ () => this.setState(prevState => { return { reveal: !prevState.reveal } }) }>{ clue.answer }</ClueAnswer>
</ClueWrapper>
);
}
}
export default Clue;
我的 setupTest.js
文件如下所示:
// Polyfill
import raf from './polyfill';
// Vendor
import { configure } from 'enzyme';
import Adapter from 'enzyme-adapter-react-16';
import 'jest-styled-components';
configure({ adapter: new Adapter() });
最后是我的测试文件:
// Vendor
import React from 'react';
import { shallow } from 'enzyme';
// Component
import Clue from './clue';
// Fixtures
import { clue } from '../data/fixtures';
const props = { clue };
describe('Clue Component', () => {
const clueWrapper = shallow(<Clue { ...props } />);
describe('and behavior on click', () => {
const ClueAnswer = clueWrapper.find('ClueAnswer');
const revealBeforeClick = clueWrapper.state('reveal');
let revealAfterClick;
beforeAll(() => {
ClueAnswer.simulate('click');
revealAfterClick = clueWrapper.state('reveal');
});
it('toggles reveal state on click', () => {
expect(revealBeforeClick).not.toBe(revealAfterClick);
});
it('changes the opacity on click', () => {
console.log(clueWrapper.debug());
console.log(ClueAnswer.props());
expect(ClueAnswer).toHaveStyleRule('opacity', 1);
});
});
});
clueWrapper.debug()
的调试如下所示:
<styled.div>
<h3>
Difficulty:
200
</h3>
<hr />
<p>
q one
</p>
<hr />
<ClueAnswer reveal={true} onClick={[Function]}>
a one
</ClueAnswer>
</styled.div>
我希望从 toHaveStyleRule
获得不透明度的当前值,但我却遇到了所描述的问题。
有人有提示吗?
此致
问题在于,当仅使用 shallow
渲染父组件时,ClueAnswer
并未真正渲染。使用 mount
也应该强制渲染 ClueAnswer