Jest Enzyme测试一个在render方法中返回null的React组件

klu*_*gjo 28 javascript reactjs jestjs enzyme

我有一个组件在某些条件下在呈现中返回null:

render() {
  if (this.props.isHidden) {
      return null;
  }

  return <div>test</div>;
}
Run Code Online (Sandbox Code Playgroud)

我想检查当使用jest和酶时isHidden为true时组件是否为null:

describe('myComp', () => {
    it('should not render if isHidden is true', () => {
        const comp = shallow(<myComp isHidden={true} />);
        expect(comp.children().length).toBe(0);
    });
});
Run Code Online (Sandbox Code Playgroud)

这有效,但有没有更惯用的方式来编写这个测试?对呈现为null的组件进行测试是一种常见的情况.

Abd*_*UMI 28

   expect(comp.type()).toEqual(null)
Run Code Online (Sandbox Code Playgroud)

而已!

要么: expect(comp.get(0)).toBeFalsy()

  • `expect(comp.get(0)).toBeFalsy()` **为我工作**。`expect(comp.type()).toEqual(null)`没有**。 (2认同)

Sho*_*waz 24

根据ShallowWrapper::html实现,如果组件实例类型为null,则返回null,结果为render.

expect(comp.html()).toBeNull();
Run Code Online (Sandbox Code Playgroud)

  • 虽然此代码段可以解决问题,但它无法解释为什么或如何回答问题.请[包括您的代码的解释](/ meta.stackexchange.com/q/114762/269535),因为这真的有助于提高您的帖子的质量.请记住,您将来会回答读者的问题,而这些人可能不知道您的代码建议的原因. (2认同)

Ben*_*tal 15

ShallowWrapper具有isEmptyRender()功能:

expect(comp.isEmptyRender()).toBe(true)
Run Code Online (Sandbox Code Playgroud)

  • 我眼中的最佳答案。 (3认同)
  • @klugjo - 这是一个比接受的答案更好的答案。您可以更改已接受的答案吗? (2认同)
  • 这个答案最好地传达了测试的实质内容,同时也准确地测试了结果。 (2认同)

duc*_*cci 6

我们将以下内容与 jest-enzyme 一起使用

expect(comp).toBeEmptyRender()
Run Code Online (Sandbox Code Playgroud)