【问题标题】:Jest not honoring mocking of imported modules开玩笑不尊重导入模块的模拟
【发布时间】:2018-09-14 16:54:00
【问题描述】:
// fileImTestingAgainst.js
import theFuncIWantToMock from 'someModule'

export default function whatever () {
  // logging for debugging purposes
  console.log(theFuncIWantToMock)

  const myVar = theFuncIWantToMock(/* args */)
  // ... more stuff
}

// myTest.js
jest.mock('someModule', () => ({
  theFuncIWantToMock: jest.fn()
}))
import theFuncIWantToMock from 'someModule'
import whatever from 'fileImTestingAgainst'

test('do my test', () => {
  whatever()

  expect(theFuncIWantToMock).toHaveBeenCalledWith('cat')
})

我希望我的 console.log 显示 theFuncIWantToMock 是一个 mock 实例,但我看到的是最初定义的函数。根据 Jest 文档,这就是我应该如何模拟模块。但这似乎不起作用。

【问题讨论】:

    标签: javascript reactjs jestjs


    【解决方案1】:

    import theFuncIWantToMock from 'someModule'

    您正在导入 default 模块

    这意味着您需要模拟默认值。尝试将其更改为此。

    jest.mock('someModule', () => jest.fn());

    另一种模拟文件的方法是在与模块所在位置相邻的__mocks__ 下创建文件。

    内部__mocks__/someModule.js

    const mockFunc = jest.fn();
    export default mockFunc;
    

    在你的测试函数中

    jest.mock('someModule');
    

    如果这些不是 node_modules,也可以尝试使用相对路径。 https://facebook.github.io/jest/docs/en/manual-mocks.html#mocking-node-modules

    【讨论】:

    • 我也尝试过,但没有成功。我要导入的函数是默认导出。
    • 如果您在__mocks__ facebook.github.io/jest/docs/en/… 中创建了一个文件someModule.js 会怎样
    猜你喜欢
    • 1970-01-01
    • 2020-09-17
    • 2020-03-05
    • 1970-01-01
    • 2020-05-27
    • 1970-01-01
    • 2020-06-11
    • 1970-01-01
    • 2018-07-25
    相关资源
    最近更新 更多