【问题标题】:Unable pass test for no 'li' in 'ul' using Enzyme and Jest使用 Enzyme 和 Jest 无法通过“ul”中没有“li”的测试
【发布时间】: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


    【解决方案1】:

    方法不正确。

      expect(wrapper.find('.list').children()).to.have.lengthOf(0); 
    

    真的应该:

      expect(wrapper.find('.list').children()).toHaveLength(0);
    

    【讨论】:

    猜你喜欢
    • 2019-05-12
    • 2022-01-18
    • 2020-03-12
    • 2018-09-08
    • 2017-11-26
    • 1970-01-01
    • 2017-11-10
    • 1970-01-01
    • 2020-08-07
    相关资源
    最近更新 更多