node.js - 将常见的模拟代码移动到包含 Jest 手动模拟的单独文件中

标签 node.js typescript unit-testing mocking jestjs

我在很多地方都使用了一个 mock,所以我想将它移动到一个可以重复使用的单独文件中。

我认为 Jest 将其称为“手动模拟”。但是我不想使用 __mocks__惯例。

正在测试的文件的顶部:

import * as dotenvSafe from "dotenv-safe";

手动模拟文件:
const dotenvSafe: any = jest.genMockFromModule("dotenv-safe");

dotenvSafe.load = jest.fn(() => {     // the function I want to mock
  return {
    error: undefined,
    parsed: [],
  };
});

export default dotenvSafe;

在测试文件的顶部,我尝试了各种方法:
  • jest.setMock("dotenv-safe", "../../mocks/dotenv-safe");不工作。被测试的代码得到 "../../mocks/dotenv-safe.mock"而不是一个模块。
  • jest.mock("dotenv-safe", () => require("../../mocks/dotenv-safe"));不起作用 - 正在测试的代码抛出 TypeError: dotenvSafe.load is not a function .
  • jest.mock("dotenv-safe", () => { return { load: jest.fn(() => ({error: undefined, parsed: []})) }; });行得通!但是模拟是内联的,我想将它移动到一个单独的文件中。我不想在每个文件中重复这一点。

  • 什么是正确的语法?

    最佳答案

    require("../../mocks/dotenv-safe")等于模块导出。它是使用的默认导出,所以它应该是:

    jest.mock("dotenv-safe", () => require("../../mocks/dotenv-safe").default);
    

    关于node.js - 将常见的模拟代码移动到包含 Jest 手动模拟的单独文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54475454/

    相关文章:

    node.js - 如何通过.authenticate将变量传递给 Passport 策略?

    angularjs - 404 与简单的快速路由

    node.js - 将未知数量的参数传递给 NodeJS 路由

    javascript - Angular2 服务的 Karma/Jasmine 测试用例

    node.js - NodeJS 从文件加载 PFX 证书

    unit-testing - 模拟域对象不起作用

    c# - 单元测试角色访问方法

    c++ - 单元测试大型Qt项目

    windows - 'npm' 不是内部或外部命令、可运行程序或批处理文件

    Angular 6 - ForkJoin 没有导出成员