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

mik*_*ana 6 javascript unit-testing typescript jestjs

我有一个模拟版本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(() => ({})),
  };
});
Run Code Online (Sandbox Code Playgroud)

然而,我的许多测试都使用模拟 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(() => ({})),
  };
};
Run Code Online (Sandbox Code Playgroud)

在测试文件中:

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

Run Code Online (Sandbox Code Playgroud)

这失败了:

ReferenceError: Cannot access 'testSupport_1' before initialization
Run Code Online (Sandbox Code Playgroud)

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

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

Var*_*rma 3

Jest 有一个moduleNameMapper配置属性,可用于指定字符串或正则表达式以匹配您的导入并将其替换为模拟文件

或者,您可以添加模拟而不在 中指定它,moduleNameMapper方法是将模拟文件放置在名为 的文件夹中__mocks__,该文件夹应与您需要模拟的文件位于同一目录中

如果它位于 node_modules 中,则该__mocks__文件夹应该位于您的父目录中。