Unit testing 基本反应呈现测试:存在()与长度

Unit testing 基本反应呈现测试:存在()与长度,unit-testing,reactjs,enzyme,Unit Testing,Reactjs,Enzyme,在React组件的基本渲染测试中,哪种方法更可靠 const wrapper=shallow(); expect(wrapper.exists()).to.equal(true); expect(wrapper.find('div').length).to.equal(1); 测试渲染子组件的方法也一样: const wrapper=shallow(); expect(wrapper.find(MyChildComponent.exists()).to.equal(true); expect(

在React组件的基本渲染测试中,哪种方法更可靠

const wrapper=shallow();
expect(wrapper.exists()).to.equal(true);
expect(wrapper.find('div').length).to.equal(1);
测试渲染子组件的方法也一样:

const wrapper=shallow();
expect(wrapper.find(MyChildComponent.exists()).to.equal(true);
expect(wrapper.find(MyChildComponent.length).to.equal(1);

我发现
exists()
更加惯用。但是我看到大多数人在测试中使用
长度
版本。如果有的话,有什么取舍呢?

你甚至需要第一次检查吗?我认为,当您在组件上进行浅层操作时,包装器应该存在

如果您确实需要它,那么我更喜欢在第一个示例中使用
exists()
,而不是查找孩子的div。如果您稍后将该div更改为span,您的测试用例将不必要地失败,即使我们只关心包装器的存在

对于第二个示例,使用
.exists()
更有意义,因为
MyChildComponent
在将来可能被渲染一次或多次,这取决于您的用例

当您只希望
MyChildComponent
出现一次时,使用
.length
为1是有意义的,这样当另一个开发人员出现并在组件中的其他地方呈现它时,测试就会失败

90%的时间我都使用
.length
,因为通常情况下,它更合适,更不容易出错,因为要渲染的项目数量更精确。

exists()
只是长度的糖分

 exists() {
    return this.length > 0;
 }

因此,使用哪一个取决于您,就像您一样,我认为
exists()
更具描述性,更喜欢使用它。

链接已失效,新链接万岁: