Jest模拟默认导出 - require vs import

20 浏览
0 Comments

Jest模拟默认导出 - require vs import

我在这里看到了关于使用jest来嘲笑默认导出的问题,但我认为这个问题还没有被问过:

当嘲笑正在测试的模块的依赖项的默认导出时,如果模块使用ES6的import语句导入依赖项,则测试套件无法运行,并显示“TypeError: (0, _dependency.default)不是一个函数”。然而,如果模块使用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()

};

});

// 这是我最终想要调用的

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();

0