我正在为我的反应项目编写单元测试用例,并且使用 jest 和 ase 来编写测试用例。我看过那些搞笑的文件
Https://jestjs.io/docs/en/jest-object.html#jestspyonobject-methodname
这解释了 jest.spyOn()的方法,但我没有完全理解。
jest.spyOn()
所以我想知道更多关于我们应该使用 jest.fn()和我们应该/必须使用 jest.spyOn()的具体地方的细节。如果能用两种方法的例子来解释,那将是一个很大的帮助。
jest.fn()
谢谢
jest.fn()是一个创建存根的方法,它允许你跟踪调用,定义返回值等等。
jest.spyOn()来自 jasmine,它允许你将 现有的方法对象转换成间谍,这也允许你跟踪调用并重新定义原来的方法实现。
我的经验法则是: 如果您想使现有的实现成为一个间谍,那么如果您正在构建一个 mock,那么使用 spyOn,那么使用 fn()。
spyOn
fn()
我对反应/前端项目中这两个功能的简单理解如下:
mockRestore()
(好的博客文章: https://medium.com/@rickhanlonii/understanding-jest-mocks-f0046c68e53c)
据我所知,唯一的区别是 你可以恢复原来的功能与 jest.spyOn,你不能与 jest.fn。
jest.spyOn
jest.fn
假设我们有一些钩子,在组件被渲染时调用函数,这里我们只检查函数被调用,我们不测试那个函数。
另一种情况下,如果我们想要原始函数来测试它是如何工作的,我们需要在一个测试文件中同时使用这两种方法。
真正的方法:
myMethod() { return 33; }
用 jest.fn()
const myMethod = jest.fn().mockImplementation(() => 25); const result = myMethod(); expect(result).toBe(25);
如果我们现在想测试 real myMethod,我们不能用 jest.fn ()将它恢复到正常状态。
关于间谍还有一件事:
const spy_myMethod = jest.spyOn(component, "myMethod").mockImplementation(() => 25); const result = myMethod(); expect(result).toBe(25);
现在,如果我们想要原始的 myMethod
spy_myMethod.mockRestore(); const result = myMethod(); expect(result).toBe(33);