如何评估第一张快照

时间:2019-02-13 12:34:02

标签: javascript unit-testing testing jestjs

function sum(a,b) { return a+b;}

it("testing snapshot with sum",()=>{
  expect(sum(1,2)).toMatchSnapshot();
})

如果测试在第一个快照本身返回的值不是3时,如何通过错误进行上述测试?我猜它相对比较,但是我不确定是否可以在我们知道确切的价值的地方使用它。

2 个答案:

答案 0 :(得分:1)

使用toMatchSnapshot()进行快照测试用于测试渲染的UI,即组件的HTML。

如果要进行单元测试并测试函数的输出,则可以使用诸如toEqual之类的匹配器,请参见此doc about Jest matchers

在您的情况下:

function sum(a, b) { return a + b; }

it("testing snapshot with sum", () => {
    expect(sum(1, 2)).toEqual(3);
})

答案 1 :(得分:1)

只需完整一点:


如果Jest运行快照测试并且尚不存在快照,它将创建一个快照。来自docs

  

在随后的测试运行中,Jest将简单地将渲染的输出与先前的快照进行比较。如果它们匹配,则测试将通过。如果它们不匹配,则可能是测试运行程序发现了一个错误...或者实现已更改,并且需要更新快照。

请注意

  

快照工件应与代码更改一起提交,并在代码检查过程中进行检查。

快照测试是最常用的用于UI代码,但这并不意味着它只能 用于UI代码。


对于您要描述的测试,第一次运行测试时,它将创建一个值为3的快照。

作为开发人员,您有责任确保该值正确并使用源代码检查快照。

最终,该过程与检查将3的正确值传递给.toBe(3)之类并将该断言检查到源代码中的过程相同。


是的,这是测试所测试功能的有效方法。

话虽如此,toMatchSnapshot的开销要比toBe这样的开销大得多,因此对于像这样的简单测试,仅使用.toBe(3)而不是{{ 1}}。

快照测试对于复杂的值(如UI)最为有用,如果这些值包含在内嵌中并且难以准确更新,则UI会使测试文件膨胀。通过快照测试,它们被存储在单独的文件中,并且一旦验证了更新的值是正确的,则告诉.toMatchSnapshot()即可更新快照,从而轻松进行更新。