javascript - 开 Jest 测试,在第一次调用时调用实际实现,模拟其余部分

标签 javascript node.js jestjs

我们正在将一个 repo 从 sinon stub 转移到 jest,我在这个模拟中遇到了麻烦。我想做的是在第一次调用时调用实际的实现,然后模拟其余的调用。这个函数是递归的,所以我们希望第一次调用调用实际的实现,然后模拟递归调用。
在sinon,它是这样完成的

const stub = sandbox.stub(instance, 'function');
stub
  .onFirstCall()
  .callsFake(stub.wrappedMethod)
  .callsFake((args) => args);
我想做这样的事情,但在 jest spy 或 mock 实例上找不到实际的实现。这根本不可能吗?
const spy = jest.spyOn(instance, 'function');
spy
  .mockImplementationOnce(spy.mock.actual) // ???
  .mockImplementation((args) => args);

最佳答案

要使用模拟库执行此操作,请使用 jest.requireActual() .复制 the guide 中的示例:

jest.mock('node-fetch');
const fetch = jest.requireActual('node-fetch');
这允许您模拟 fetch正在测试的代码中的库,但使用真正的 fetch在您的测试本身中起作用。

关于javascript - 开 Jest 测试,在第一次调用时调用实际实现,模拟其余部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64771617/

相关文章:

javascript - 如何使用 Javascript 设置默认选项?

wordpress - 将 Wordpress 集成到 Heroku 上的 node.js 网站中?

node.js - 服务器不响应带参数的 url

Node.js 回调被调用两次

javascript - 将 React/Enzyme/Jest 与 Nextjs 一起使用时是否可以获取整页 html?

unit-testing - 如何在 WebStorm 2019 中更新所有/多个快照(开 Jest )

javascript - 如何强制 Jest 单元测试断言在测试结束之前执行?

javascript - 重复背景直到达到高度

javascript - 使用与 ES6/7 的变量名称相同的键从变量创建对象

javascript - 为什么会触发我的 KnockoutJS 自定义绑定(bind)?