【发布时间】:2021-01-08 04:43:23
【问题描述】:
我可以说 file.js 有类似这样的代码
const myFunc = () => {
return {
func1: () => {},
func2: () => {}
}
}
export const myObject = {
key: ''
};
export default myFunc();
我试图在我的测试中使用 jest 来模拟这个导出。假设 file.test.js 是测试文件。
jest.mock('./path/file', () => {
return {
default: {
func1: jest.fn(),
func2: jest.fn()
},
myObject: {}
};
});
但是当我的测试运行时,它会向我抛出错误,说_File.default.func1 is not a function。
如何正确模拟我的 js 文件同时具有默认和命名导出?
【问题讨论】:
-
func1: jest.fn()创建一个名为func1的属性,其调用结果jets.fn()... - 因为您在该代码中调用该函数... 除非调用jest.fn()返回一个函数,删除()- 或者func1: () => { return jest.fn();}- 现在看起来就像file.js中的代码 -
@JaromandaX 确实有效,谢谢。但是我使用 jest.fn() 作为间谍功能传递的所有其他地方。为什么它不在那里破裂?
-
我看不到你使用它的所有其他地方,所以我无法帮助你理解你自己的代码......如果你想调用一个函数,你可以
fn()- 如果你想将函数传递给某物,您使用fn -
这是有道理的。谢谢你拯救了我的一天。
-
@JaromandaX
jest.fn()does return a function,所以这应该可以正常工作。
标签: javascript ecmascript-6 jestjs mocking