我正在为我的 react 项目编写单元测试用例,并使用 Jest 和 enzyme 来编写测试用例。我已阅读 Jest 文档
https://jestjs.io/docs/en/jest-object.html#jestspyonobject-methodname
它解释了jest.spyOn()
方法,但我不完全理解。
所以我想了解更多关于我们应该使用 jest.fn()
的具体位置以及我们应该/必须使用 jest.spyOn()
的具体位置。如果能用这两种方法的示例来解释,那就会有很大的帮助。
谢谢
最佳答案
我对react/frontend项目中这两个函数的简单理解如下:
jest.fn()
- 您想要模拟一个函数,但实际上并不关心该函数的原始实现(它将被
jest.fn()
覆盖) - 通常您只是模拟返回值
- 如果您想在测试中删除对后端(例如调用后端 API 时)或第三方库的依赖项,这非常有用
- 如果您想进行真正的单元测试,它也非常有帮助。您不关心您测试的单元调用的某些函数是否正常工作,因为这不是它的责任的一部分。
jest.spyOn()
- 该函数的原始实现与您的测试相关,但是:
- 您想要仅针对特定场景添加自己的实现,然后通过
mockRestore()
再次重置它(如果您只使用jest.spyOn()
而不使用进一步模拟它,默认情况下它仍然会调用原始函数) - 您只想查看该函数是否被调用
- ...
- 您想要仅针对特定场景添加自己的实现,然后通过
- 我认为这对于集成测试特别有帮助,但不仅仅只对集成测试有用!
(好博文:https://medium.com/@rickhanlonii/understanding-jest-mocks-f0046c68e53c)
关于reactjs - jest 中的 jest.fn() 和 jest.spyOn() 方法有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57643808/