function sum(a,b) { return a+b;}
it("testing snapshot with sum",()=>{
expect(sum(1,2)).toMatchSnapshot();
})
如果测试在第一个快照本身返回的值不是3时,如何通过错误进行上述测试?我猜它相对比较,但是我不确定是否可以在我们知道确切的价值的地方使用它。
答案 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()
即可更新快照,从而轻松进行更新。