【问题标题】:How can I share jest mocks between multiple tests?如何在多个测试之间共享笑话模拟?
【发布时间】:2020-10-23 00:13:13
【问题描述】:

我有一个 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 开发工具包,并且我不想不必要地重复模拟代码。但是,如果我将函数移动到单独的文件中并导入它,这将失败:

在我的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 实例的父函数,但我仍然无法让它工作。

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

【问题讨论】:

    标签: javascript typescript unit-testing jestjs


    【解决方案1】:

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

    或者,您可以添加模拟而不在 moduleNameMapper 中指定它 placing your mock file in a folder named __mocks__ 应该与您需要模拟的文件位于同一目录中

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

    【讨论】:

    • 感谢瓦伦!我修复了链接,所以它们不会读作“这里”,但这是完美的!
    猜你喜欢
    • 2020-09-13
    • 2019-04-13
    • 2019-08-03
    • 1970-01-01
    • 1970-01-01
    • 2017-04-08
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    相关资源
    最近更新 更多