我正在为我的 React 项目编写单元测试用例,并使用笑话和酶来编写测试用例。我已阅读笑话文档
https://jestjs.io/docs/en/jest-object.html#jestspyonobject-methodname
解释了
jest.spyOn()
方法,但我不完全理解。
所以我想知道更多关于我们应该在哪里使用
jest.fn()
以及在哪里我们应该/必须使用jest.spyOn()
的具体信息。如果可以用这两种方法的示例来解释,那就会有很大的帮助。
谢谢
我对react/frontend项目中这两个函数的简单理解如下:
jest.fn()
jest.fn()
覆盖)jest.spyOn()
mockRestore()
再次重置它(如果您只是使用 jest.spyOn()
而不进一步模拟它,默认情况下它仍然会调用原始函数)(好博文:https://medium.com/@rickhanlonii/understanding-jest-mocks-f0046c68e53c)
据我了解,唯一的区别是您可以使用jest.spyOn
恢复原始功能,而不能使用
jest.fn
。
假设我们有一些钩子在组件渲染时调用一个函数,这里我们可以只检查函数被调用,我们不测试该函数。
另一种情况,如果我们想要原始函数来测试它是如何工作的。我们需要将两者放在一个测试文件中。
真实方法:
myMethod() {
return 33;
}
与
jest.fn()
const myMethod = jest.fn().mockImplementation(() => 25);
const result = myMethod();
expect(result).toBe(25);
如果我们现在想测试真正的 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);
jest.fn()
它是一种创建存根的方法,它允许您跟踪调用、定义返回值等...
jest.spyOn()
来自 jasmine,它允许您将对象上的现有方法转换为间谍,这还允许您跟踪调用并重新定义原始方法实现。
我的经验法则是:如果你想让现有的实现成为间谍,请使用
spyOn
如果你正在构建模拟,请使用 fn()
。