首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >开玩笑测试,在第一次调用时调用实际实现,然后模拟其余的实现。

开玩笑测试,在第一次调用时调用实际实现,然后模拟其余的实现。
EN

Stack Overflow用户
提问于 2020-11-10 15:15:21
回答 2查看 12.4K关注 0票数 7

我们要把回购从塞农的存根转移到开玩笑,而我对这个模拟有困难。我想要做的是在第一次调用时调用实际的实现,然后模拟其余的调用。这个函数是递归的,所以我们希望第一个调用调用实际的实现,然后模拟递归调用。

在西农,这是这样的

代码语言:javascript
复制
const stub = sandbox.stub(instance, 'function');
stub
  .onFirstCall()
  .callsFake(stub.wrappedMethod)
  .callsFake((args) => args);

我想这样做,但找不到实际的实现上的玩笑间谍或模拟实例。难道这根本不可能吗?

代码语言:javascript
复制
const spy = jest.spyOn(instance, 'function');
spy
  .mockImplementationOnce(spy.mock.actual) // ???
  .mockImplementation((args) => args);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-11-10 15:29:20

为什么你不能做如下类似的事情呢?

代码语言:javascript
复制
const spy = jest.spyOn(instance, 'function');
spy
  .mockImplementationOnce(() => originalInstanceFunction())
  .mockImplementation((args) => args);

下面是一个示例实现- Note必须存储对原始实例函数的引用。

代码语言:javascript
复制
const original = {
    func: (args) => { console.log(`original ${args}`)} 
};


describe('test', () => {
    it('should call original then mock', () => {
        const originalFunction = original.func;
        const spy = jest.spyOn(original, 'func');
        spy.mockImplementationOnce((args) => originalFunction(args))
            .mockImplementation((args) => console.log(`mock ${args}`));
        
        original.func('test-args');
        original.func('test-args');
        expect(spy).toBeCalledTimes(2);
    });
});

输出:

代码语言:javascript
复制
  console.log
    original test-args

      at originalFunction (test.test.js:2:28)

  console.log
    mock test-args

      at Object.spy.mockImplementationOnce.mockImplementation.args (test.test.js:12:42)
票数 7
EN

Stack Overflow用户

发布于 2021-06-15 19:04:52

若要使用模拟库执行此操作,请使用jest.requireActual()。从导游复制一个示例

代码语言:javascript
复制
jest.mock('node-fetch');
const fetch = jest.requireActual('node-fetch');

这允许您在正在测试的代码中模拟fetch库,但在测试本身中使用真正的fetch函数。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64771617

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档