Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 将通用模拟代码移动到包含Jest手动模拟的单独文件中_Node.js_Typescript_Unit Testing_Mocking_Jestjs - Fatal编程技术网

Node.js 将通用模拟代码移动到包含Jest手动模拟的单独文件中

Node.js 将通用模拟代码移动到包含Jest手动模拟的单独文件中,node.js,typescript,unit-testing,mocking,jestjs,Node.js,Typescript,Unit Testing,Mocking,Jestjs,我在很多地方都使用mock,所以我想将它移动到一个单独的文件中,以便重用 我认为Jest称之为“手动模拟”。但是,我不想使用\uuuu mocks\uuu约定 正在测试的文件的顶部: import * as dotenvSafe from "dotenv-safe"; 手动模拟文件: const dotenvSafe: any = jest.genMockFromModule("dotenv-safe"); dotenvSafe.load = jest.fn(() => { /

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

我认为Jest称之为“手动模拟”。但是,我不想使用
\uuuu mocks\uuu
约定

正在测试的文件的顶部:

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”)
    不工作-正在测试的代码抛出
    类型错误:dotenvafe.load不是函数

  • jest.mock(“dotenv-safe”,()=>{return{load:jest.fn(()=>({error:undefined,parsed:[]}))};})
    真管用!但是mock是内联的,我想把它移动到一个单独的文件中。我不想在每个文件中重复这个

  • 正确的语法是什么?

    require(“../../mocks/dotenv-safe”)
    等于模块导出。它是使用的默认导出,因此应为:

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

    哇!这一个词起了很大的作用,我花了好几个小时来尝试我在文档中找到的每一个组合!他们应该叫你“jestus”:)哈,很高兴这有帮助。还有另一种方法
    jest.setMock(“dotenv-safe”,require(“../../mocks/dotenv-safe”)是抱歉,需要
    默认值
    -我将手动模拟更改为
    模块。导出
    格式,因为它在消费代码中不太“令人惊讶”(不需要
    默认值
    )。我的观点是有两种很好的方法可以做到这一点,
    jest.mock
    jest.setMock