如何使用 Jest v25 模拟 ES6 默认模块

时间:2021-06-03 21:17:31

标签: jestjs mocking ts-jest

我已经阅读了很多关于此的问题和博客,但仍有一些地方不对。

人为的例子,但假设我有一个像这样的 testDependency.ts 文件:

export default {
    some: 'things',
    to: 'be',
    mocked: 'please'
}

然后我尝试在我的测试中模拟默认模块:

import * as testDep from 'lib/testDependency'


jest.mock('lib/testDependency', () => ({
    __esModule: true,
    default: { now: 'mocked' }
}))


describe('Test Dependency', () => {
    it('should work', () => {
        console.log(testDep) // would expect this to log { now: 'mocked' }
        expect(testDep.now).toEqual('mocked')
    })
})

console.log 返回原始值,期望失败。

我已尝试使用相对导入代替 lib/...,并且此模块未导入代码库中的其他任何位置。我也试过使用 import testDep from 'lib/testDependency' 导入,但也没有奏效。

还有什么可以阻止它工作的吗?我对这里应该发生的事情的理解有误吗?

1 个答案:

答案 0 :(得分:0)

测试失败,因为 testDep 是一个模块,而不是您期望的默认模块值。如果您想检查 now 属性值,可以使用 testDep.default 获取它。

我建议您更改此设置:

import * as testDep from 'lib/testDependency';

到:

// import default
import testDep from 'lib/testDependency';
相关问题