我正在为我的react项目编写单元测试用例,并使用玩笑和酶来编写测试用例。我已经阅读了开玩笑的文档
https://jestjs.io/docs/en/jest-object.html#jestspyonobject-methodname
解释了jest.spyOn()
方法,但我并不完全理解。
因此,我想了解有关应该使用jest.fn()
的特定位置以及应该/必须使用jest.spyOn()
的特定位置的更多详细信息。如果可以通过两种方法的示例进行说明,将会有很大帮助。
谢谢
答案 0 :(得分:4)
我对react / frontend项目中的这两个功能的简单理解如下:
jest.fn()
jest.spyOn()
mockRestore()
再次重置它(好的博客文章:https://medium.com/@rickhanlonii/understanding-jest-mocks-f0046c68e53c)
答案 1 :(得分:3)
据我了解,唯一的区别是您可以使用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);
答案 2 :(得分:1)
telethon.sync
是一种创建存根的方法,它将允许您跟踪调用,定义返回值等。
jest.fn()
凸轮,它可以将对象上的现有方法转换为间谍,还可以跟踪调用并重新定义原始方法的实现。
我的经验法则是:如果要使现有的实现成为间谍,请使用jest.spyOn()
。如果要构建模拟,请使用spyOn
。