Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/393.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
Javascript 用另一个模块来模拟一个模块_Javascript_Jestjs_Mocking - Fatal编程技术网

Javascript 用另一个模块来模拟一个模块

Javascript 用另一个模块来模拟一个模块,javascript,jestjs,mocking,Javascript,Jestjs,Mocking,编辑:问题已修复,请参见下文 我在我的应用程序上使用Jest,我想用另一个模块来模拟一个模块。换句话说,我希望在测试中调用第一个模块时,用第二个模块替换第一个模块 如果我将模拟代码放在测试文件中,效果很好,如下所示: *src/app/module.js* export default { method : () => //doSomethingComplicated } *src/__tests__/test.js* import module from "../app/

编辑:问题已修复,请参见下文

我在我的应用程序上使用Jest,我想用另一个模块来模拟一个模块。换句话说,我希望在测试中调用第一个模块时,用第二个模块替换第一个模块

如果我将模拟代码放在测试文件中,效果很好,如下所示:

*src/app/module.js*
export default {
  method : () => //doSomethingComplicated
}

*src/__tests__/test.js*
import module from "../app/module.js"
jest.mock("..app/module.js", () => {
  return {
    method : () => //doSomethingSimpler
  }
)
*src/app/module.js*
export default {
  method : () => //doSomethingComplicated
}

*src/__mocks__/mockModule.js*
export default {
  method : () => //doSomethingSimpler
}

*src/__tests__/test.js*
import mockModule from "../__mocks__/mockModule.js"
import module from "../app/module.js"
jest.mock("..app/module.js", () => {
  return mockModule
})
但是,我没有成功地在一个单独的文件中重构我的代码,比如:

*src/app/module.js*
export default {
  method : () => //doSomethingComplicated
}

*src/__tests__/test.js*
import module from "../app/module.js"
jest.mock("..app/module.js", () => {
  return {
    method : () => //doSomethingSimpler
  }
)
*src/app/module.js*
export default {
  method : () => //doSomethingComplicated
}

*src/__mocks__/mockModule.js*
export default {
  method : () => //doSomethingSimpler
}

*src/__tests__/test.js*
import mockModule from "../__mocks__/mockModule.js"
import module from "../app/module.js"
jest.mock("..app/module.js", () => {
  return mockModule
})
我收到一个错误:TypeError:无法读取未定义的属性“default”

jest.mock('../app/module.js', () => {
  return {
    __esModule: true,
    default: jest.fn(() => mockModule)
  };
});
我试图为导出命名,但遇到了相同的错误:“无法读取未定义的属性‘mockModule’”(mockModule是导出的名称)

我还尝试了Jest文档中的ES6修复。测试在此情况下运行,但失败,错误为:TypeError:无法设置未定义的属性“method”

jest.mock('../app/module.js', () => {
  return {
    __esModule: true,
    default: jest.fn(() => mockModule)
  };
});
看来我在开玩笑的工厂里做错了什么,但我不知道问题出在哪里。。。你有什么建议吗? 非常感谢

编辑:我自己解决了这个问题,更深入地查看了文档:


简单地说:模拟模块应该放在子目录
/\uuuuuu mocks\uuuu/
中,与要模拟的模块位于同一目录中。然后你只需要调用
jest.mock(“../app/myModule”)
,不带任何工厂参数:jest会自动找到mock并用这个模块替换原来的模块。

编辑帖子,给出我找到的修复方法