Jest 参数化 mockImplementation

Jest Parameterize a mockImplementation

提问人:Kandarp Gandhi 提问时间:11/17/2023 更新时间:11/17/2023 访问量:13

问:

我正在模拟一个模块,如下所示。我想参数化我的模拟模块返回的值,并在我的所有测试中使用它,而不是每次需要时都重新定义它。我怎样才能做到这一点?根据 https://jestjs.io/docs/jest-object#jestmockmodulename-factory-options 我无法找到该怎么做。

jest.mock<
      typeof import('.../module')
    >('.../module', () => {
      const original = jest.requireActual<
        typeof import('.../module')
      >('.../module');
      return {
        ...original,
        callExternal: jest
          .fn()
          .mockImplementation(
            (
              iframe: WindowProxy,
              eventTarget: Window,
              id: string,
              action: { functionName: string },
            ) => {
              switch (action.functionName) {
                case 'action1':
                case 'action2':
                case 'action3':
                  return Promise.resolve({ value: returnValueToBeMocked });
                case 'action4':
                default: {
                  const errorMessage = `Unimplemented function;
                  logError(errorMessage);
                  return Promise.reject(errorMessage);
                }
              }
            },
          ),
      };
    });

如何创建一个函数并将其参数化

理想情况下,我想要这种东西

const mockModule = (mockValue)=>{ jest.mock<...above mock>}
const mock1 = mockModule(value1)
const mock2 = mockModule(value2);

describe('Feature',() =>{
    it('check with mock1', ()=>{ ..... })
    it('check with mock2', ()=>{ ..... })
})

不确定这是否可行

jestjs ts-jest

评论


答: 暂无答案