问题描述
function sum(a,b) { return a+b;}
it("testing snapshot with sum",()=>{
expect(sum(1,2)).toMatchSnapshot();
})
如果测试在第一个快照本身返回的值不是3时,如何通过错误进行上述测试? 我猜它相对比较,但是我不确定是否可以在我们知道确切的价值的地方使用它。
1楼
使用快照测试用于测试渲染的UI,即组件的HTML。
如果要进行单元测试并测试函数的输出,则可以使用诸如toEqual
匹配器, ,请参阅此 。
在您的情况下:
function sum(a, b) { return a + b; }
it("testing snapshot with sum", () => {
expect(sum(1, 2)).toEqual(3);
})
2楼
只是为了完整:
如果Jest运行快照测试并且尚不存在快照,它将创建一个。 从 :
在随后的测试运行中,Jest将简单地将渲染的输出与先前的快照进行比较。 如果它们匹配,则测试将通过。 如果它们不匹配,则说明测试运行程序发现了一个错误...或者实现已更改,并且快照需要更新。
注意
快照工件应与代码更改一起提交,并在代码检查过程中进行检查。
快照测试最常用于UI代码,但这并不意味着它只能用于UI代码。
对于您正在描述的测试,第一次运行测试时,它将创建值为3
的快照。
作为开发人员,您需要确保该值正确并使用源代码检查快照。
最终,这与检查是否将正确的3
值传递给.toBe(3)
并将该断言检查到源代码中的过程相同。
是的,这是测试所测试功能的有效方法。
话虽这么说, toMatchSnapshot
开销toMatchSnapshot
开销toBe
因此对于像这样的简单测试,仅使用.toBe(3)
而不是.toMatchSnapshot()
是.toMatchSnapshot()
。
快照测试对于复杂的值(如UI)最有用,如果UI包含在内嵌并且难以准确更新,则UI会使测试文件膨胀。
通过快照测试,它们被存储在一个单独的文件中,并且一旦验证了更新的值是正确的,告诉Jest
更新快照就可以轻松进行更新。