【问题标题】:Is there an equivalent way to set up a mock implementation instead of the __mocks__ directory approach with jest?是否有一种等效的方法来设置模拟实现而不是 __mocks__ 目录方法与玩笑?
【发布时间】:2020-02-04 16:35:08
【问题描述】:

我有一个名为retry 的实用程序函数,它使用一些重试逻辑(下面的简化版本)包装传递的函数。

在某些测试中,我只想调用传递的函数一次,而不是执行重试逻辑。

app/retry.js

module.exports = async function retry(funcProvider) {
    let retriesLeft = 5;

    while (retriesLeft > 0) {
      try {
        return await funcProvider();
      } catch (error) {
        // delay for a bit

        retriesLeft--;
      }
    }
};

和等效的__mocks__ 版本。

app/__mocks__/retry.js

module.exports = async function retry(funcProvider) {
  return await funcProvider();
}

有没有办法在不使用__mocks__ 设置的情况下执行与上述相同的操作?我想使用类似jest.mock() (https://jestjs.io/docs/en/jest-object#jestmockmodulename-factory-options) 的工厂参数的东西在测试文件中内联执行此操作,但我无法找出正确的组合。想知道我是否遗漏了一些明显的东西,或者这是否是开玩笑的“限制”。请注意,我需要在实现中引用传递的参数。

【问题讨论】:

    标签: javascript jestjs


    【解决方案1】:

    试试

    jest.mock('app/retry.js', () => 
      async (funcProvider) => { return await funcProvider(); }
    );
    

    您也可以使用__mocks__ 并根据需要修改模拟(因为它已经是同一个笑话的模拟对象):

    import retryMock from 'app/retry';
    
    ....
    it('....', () => {
      retryMock.mockReturnValueOnce(Promise.reject());
    

    【讨论】:

      猜你喜欢
      • 2022-12-10
      • 2019-03-23
      • 1970-01-01
      • 2010-09-15
      • 1970-01-01
      • 1970-01-01
      • 2011-07-28
      • 1970-01-01
      相关资源
      最近更新 更多