javascript - 开 Jest 不尊重导入模块的模拟

标签 javascript reactjs jestjs

// 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 文档,这就是我应该模拟模块的方式。但这似乎不起作用。

最佳答案

从“someModule”导入 theFuncIWantToMock

您正在导入默认模块

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

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

关于javascript - 开 Jest 不尊重导入模块的模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49662673/

相关文章:

javascript - 如何在数据库中存储富文本

javascript - 未找到错误: Failed to execute 'removeChild' on 'Node' : The node to be removed is not a child of this node

typescript - Jest Mock + Typescript 错误 TS2339

javascript - 我应该在测试中使用 toHaveBeenCalledTimes 来计算调度被调用的次数吗?

javascript - Jest 模拟 window.sessionStorage 的最佳方法是什么

javascript - 按字母顺序对描述术语进行排序,并随之移动后面的 DOM 元素

javascript - 如何将外部 jquery 脚本添加到 tinymce 内部文本?

javascript - JQuery 动画队列永不停止

javascript - ng-grid 和实时数据内存泄漏

node.js - 如何使用 Electron 和 React 显示从文件中读取的数据?