mav*_*ick 6 javascript reactjs jestjs enzyme
在单元测试中,我想测试父组件是否成功呈现了其子组件。这是代码:
describe('Parent Component', () => {
it('renders Child component', () => {
const wrapper = shallow(<Parent store={store} />);
expect(wrapper.find(Child).length).toEqual(1);
});
});
Run Code Online (Sandbox Code Playgroud)
上级:
const Parent = observer(({ store }) => {
const bookList = toJS(store.planets);
return (
<div>
<div className={style.planet_container}>
{bookList.map(book => {
return <Child key={book.name} name={book.name} />;
})}
</div>
</div>
);
});
Run Code Online (Sandbox Code Playgroud)
上面的代码是从这里获取的,但是它不起作用。我收到以下错误:
预期1,收到0'
我要去哪里错了?我在Jest 23.1.0中使用酶3.3。
小智 10
您可以使用containsMatchingElement().
基于酶文档:
返回 patternNode 反应元素是否与渲染树中的任何元素匹配。
您的测试应如下所示:
describe('Parent Component', () => {
it('renders Child component', () => {
const wrapper = shallow(<Parent store={store} />);
expect(wrapper.containsMatchingElement(<Child />)).toEqual(true);
});
});
Run Code Online (Sandbox Code Playgroud)
Enzyme允许通过组件的displayName进行查找:
来自酶 API 文档:
const wrapper = shallow(<MyComponent />);
expect(wrapper.find('Foo')).to.have.lengthOf(1);
Run Code Online (Sandbox Code Playgroud)
因此,为了测试确保子组件已呈现,您可以简单地通过其displayName引用它。
你可以打印包装器的 HTML 字符串:console.log( wrapper.debug() )
如果您的组件是动态的,您可以将其 displayName 设置为固定的,这样测试会更加安全:
const MyComponent = props.dynamicChildComponent;
MyComponent.displayName = 'Foo';
Run Code Online (Sandbox Code Playgroud)
Child 没有渲染,因为您没有正确模拟道具(在本例中为道具“store”)。
尝试这个:
it('renders Child component', () => {
const wrapper = shallow( < Parent / > );
wrapper.setProps({
store: {
planets: [{
name: "name 1"
}
]
}
});
expect(wrapper.find(Child)).toHaveLength(1);
});Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9271 次 |
| 最近记录: |