reactjs - jest 中的 jest.fn() 和 jest.spyOn() 方法有什么区别?

标签 reactjs mocking jestjs spy

我正在为我的 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/

相关文章:

reactjs - 可选路径 React Router 4

reactjs - Mui 数据网格 Pro v4.单击全部显示/隐藏全部时,不会触发列可见性事件

java - mockito 验证方法内部方法调用

javascript - Jest 错误 : TypeError: Cannot read property 'options' of undefined

javascript - 如何访问 localStorage 或模拟 localStorage 以进行 Jest + vue-test-utils 测试?

node.js - 将 Webpack 添加到现有 React 应用程序

reactjs - 带有钩子(Hook)的 React-Table 失去了对表内输入的关注?

testing - 使用 Angularjs 和 requirejs 时在测试中注入(inject)

java - 将 Mockito 增强类(class)与常规类(class)进行比较

javascript - 判断函数是否接受参数