【问题标题】:How to mock ES6 default module using Jest v25如何使用 Jest v25 模拟 ES6 默认模块
【发布时间】:2021-08-22 00:13:16
【问题描述】:

我已经阅读了很多关于这方面的问题和博客,但还是有些不对劲。

人为的例子,但假设我有一个像这样的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' 导入,也没有成功。

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

【问题讨论】:

    标签: jestjs mocking ts-jest


    【解决方案1】:

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

    我建议你改变这个:

    import * as testDep from 'lib/testDependency';
    

    到:

    // import default
    import testDep from 'lib/testDependency';
    

    【讨论】:

    • 忘了说,我试过了,还是不行。
    猜你喜欢
    • 1970-01-01
    • 2021-01-21
    • 2017-09-30
    • 2019-04-16
    • 2018-05-04
    • 2018-07-25
    • 2018-01-26
    相关资源
    最近更新 更多