如何在多个测试之间共享jest mocks?

15 浏览
0 Comments

如何在多个测试之间共享jest mocks?

我有一个模拟的aws-sdk版本,它在我的测试中运行良好:

jest.mock("aws-sdk", () => {
  return {
    Credentials: jest.fn().mockImplementation(() => ({})),
    Config: jest.fn().mockImplementation(() => ({})),
    config: {
      update: jest.fn(),
    },
    S3: jest.fn().mockImplementation(() => ({
      getSignedUrlPromise: awsGetSignedUrlMock,
    })),
    SQS: jest.fn().mockImplementation(() => ({})),
  };
});

然而,我的许多测试使用模拟的AWS SDK,并且我不想不必要地重复模拟代码。然而,如果我将该函数移动到一个单独的文件并导入它,这将失败:

在我的testSupport.ts文件中:

export const mockAwsSdk = () => {
  return {
    Credentials: jest.fn().mockImplementation(() => ({})),
    Config: jest.fn().mockImplementation(() => ({})),
    config: {
      update: jest.fn(),
    },
    S3: jest.fn().mockImplementation(() => ({
      getSignedUrlPromise: awsGetSignedUrlMock,
    })),
    SQS: jest.fn().mockImplementation(() => ({})),
  };
};

在测试文件中:

jest.mock("aws-sdk", mockAwsSdk);

这会导致失败:

ReferenceError: Cannot access 'testSupport_1' before initialization

我尝试了各种解决方案,包括创建一个接受jest实例的父函数,但我仍然无法使其工作。

如何在多个测试之间共享jest模拟?

0