【发布时间】:2019-08-02 04:06:54
【问题描述】:
简单的待办事项列表应用,开始使用 Jest 和 Enzyme。
在 App.js 中,我正在渲染以下组件,其中 props.list 等于状态上的空数组。
export const Ul = ({list}) => {
return (
<ul className="list" >
{list.map((item,i) => <li key={i}>{item}</li> )}
</ul>
)
}
在 Chrome 中查看它,元素按预期呈现。
<ul class="list"></ul>
在控制台中使用wrapper.debug()查看Enzyme生成的dom,组件渲染为:
<Ul list={{...}}>
<ul className="list" />
</Ul>
我觉得这很奇怪,不知道为什么。
我的问题是我无法通过 UL 内没有“li”孩子的测试:
it('ul initially has no children', () => {
const wrapper = mount(<App />);
expect(wrapper.find('.list').children()).to.have.lengthOf(0);
// const ul = wrapper.find('.list');
// expect(ul).toHaveLength(0);
})
我不断收到“TypeError: Cannot read property 'have' of undefined”,这让我觉得它没有找到
我只是错误地使用了 jest/enzyme api 吗?
【问题讨论】:
-
测试很奇怪。为什么挂载
App而不是Ul? -
我的意图是挂载 App,模拟一个更改事件,然后检查列表的状态和内容。我可以挂载 Ul 并给它一个空数组,但我不明白这一点。当然会是空的。
-
您没有在测试用例中模拟任何更改事件,这就是为什么我不了解这种情况 - 我什至看不到您的
App组件,因此我无法给出你更准确的建议。在这种情况下,我宁愿单独测试Ul组件。 -
只是为了澄清一下,如果我模拟一个更新状态的事件,(添加了一个待办事项项)我只能测试状态是否已更改。我无法测试 ul 现在该项目是否正确?
标签: javascript reactjs jestjs jsx enzyme