什么时候我们必须使用 jest 快照或手动检查?

jus*_*rld 4 javascript unit-testing snapshot reactjs enzyme

我有代码可以改变我的反应组件的状态,我想为它们编写单元测试。

我写的代码充满了这些语句:

    expect(component.state().someArray).toBeDefined();
    expect(component.state().someArray).toEqual(EXPECTEDARRAY);

    expect(component.state().someArray.someNestedArray).toBeDefined();        expect(component.state().someArray.someNestedArray).toEqual(EXPECTEDINNERARRAY);
Run Code Online (Sandbox Code Playgroud)

但是,我的一位同事建议我将其更改为:

    expect(component.state()).toMatchSnapshot();
Run Code Online (Sandbox Code Playgroud)

哇,使用快照测试看起来要简单得多。但是,我看到很多文章都使用了我的方法。

所以我的问题是:我们什么时候应该使用 jest 的快照和“匹配器”来测试 React 组件?

Moy*_*ote 5

没有黄金法则可遵循

快照通过缩短测试代码来简化测试。它们也非常适合将测试结果与复杂对象进行比较。缺点是快照位于另一个文件中。当您阅读测试(可能由其他人编写)时,您必须打开其他文件并找出此处实际预期的结果。另一件坏事是它们很容易更新为不打算更新的内容。

旧时尚的断言并不适合比较更大的数据。但好消息是您不会无意中修改测试。你必须通过断言并弄清楚你在做正确的事情。

话虽如此,我遵循了以下协议:

  • 如果断言的对象很大,请使用快照
  • 如果断言针对数组、布尔值、字符串、数字或小对象,请使用旧式断言