【发布时间】:2016-11-30 14:56:12
【问题描述】:
我有一个 React 组件,我正在尝试使用 Enzyme/Jest 进行测试。我正在尝试找出最合适的测试来确保组件已呈现。
我的组件有一个 prop shouldRender,如果为 false,将导致组件不渲染。我的组件如下所示:
import React from 'react';
const propTypes = {
shouldRender: React.PropTypes.bool,
};
class MyComponent extends React.Component {
constructor(props) {
super(props);
this.state = {
foo: 'bar',
};
}
render() {
if (!this.props.shouldRender) {
return null;
}
return (
<div>
<span>My component</span>
</div>
);
}
}
MyComponent.propTypes = propTypes;
export default MyComponent;
我有一个看起来像这样的测试:
import React from 'react';
import { shallow } from 'enzyme';
import MyComponent from '../MyComponent';
describe('MyComponent', () => {
it('Should render if we want it to', () => {
const component = shallow(<MyComponent shouldRender />);
expect(component).toBeDefined(); // Passes
});
it('Should not render if we do not want it to', () => {
const component = shallow(<MyComponent />);
expect(component).not.toBeDefined(); // Does not pass, as component isn't undefined.
});
});
我希望第二个测试失败,因为组件没有呈现。有没有更好的方法来测试组件是否已渲染?
如果需要,很乐意提供更多信息。
谢谢!
【问题讨论】:
-
只是一个通知。根据从
render返回未定义的文档,这不是一个有效的选项。 "您也可以返回null或false以表明您不希望渲染任何内容。" -
糟糕——我只是在现场手工编写了组件以获得更简化的版本——我现在将修复代码。谢谢!
标签: javascript reactjs jestjs enzyme