【发布时间】:2018-04-13 21:05:47
【问题描述】:
我在这里看到了关于用 jest 模拟默认导出的问题,但我认为这已经被问过了:
在模拟正在测试的模块的依赖项的默认导出时,如果模块使用 ES6 导入语句导入依赖项,则测试套件将无法运行,声明 TypeError: (0 , _dependency.default) is not a function 它成功,但是,如果模块使用改为require().default 调用。
在我的理解中,import module from location 直接翻译成const module = require(location).default,所以我很困惑为什么会这样。我宁愿保持我的代码风格一致,而不是在原始模块中使用require 调用。
有办法吗?
使用模拟测试文件:
import './modules.js';
import dependency from './dependency';
jest.mock('./dependency', () => {
return {
default: jest.fn()
};
});
// This is what I would eventually like to call
it('calls the mocked function', () => {
expect(dependency).toHaveBeenCalled();
});
依赖.js
export default () => console.log('do something');
module.js(不工作)
import dependency from './dependency.js';
dependency();
module.js(工作)
const dependency = require('./dependency.js').default;
dependency();
【问题讨论】:
-
dependency调用是否发生在与jest.mock调用不同的模块上? -
不应该
jest.mock('./dependecy', () => jest.fn());在这两种情况下都有效吗? -
我更新了测试文件的代码,显示模块正在通过简单的导入和运行进行测试。
标签: javascript jestjs es6-modules