jest.mock() 内的 jest.fn() 返回未定义

2024-04-01

我有一个简单的“util”模块,带有默认导出和 2 个命名导出。

const foo = () => 'foo'
export default foo
    
export const bar = () => 'bar'
export const baz = () => 'baz'

在我的测试中,我是这样嘲笑它的:

jest.mock('./util', () => ({
  __esModule: true,
  default: jest.fn(() => 'mocked foo'),
  bar: jest.fn(() => 'mocked bar'),
  baz: jest.fn(() => 'mocked baz'),
}))

describe('util', () => {
  //...
})

在我的组件上,当我调用时foo(), bar() or baz(), 我收到了undefined。 但如果我删除一切正常jest.fn()像那样 :

jest.mock('./util', () => ({
  __esModule: true,
  default: () => 'mocked foo',
  bar: () => 'mocked bar',
  baz: () => 'mocked baz',
}))

我的示例与 jest doc 上的示例非常接近:https://jestjs.io/docs/mock-functions#mocking-partials https://jestjs.io/docs/mock-functions#mocking-partials

我在用着React(加拿大税务局)和打字稿

我知道模拟模块有不同的方法,但我很想了解我面临的问题。

知道我做错了什么吗? :) 谢谢 !


我遇到了同样的问题(也在运行 CRA),发现这可能是原因:

https://github.com/facebook/jest/issues/9131#issuecomment-668790615 https://github.com/facebook/jest/issues/9131#issuecomment-668790615

有点晚了,但我只是遇到了这个问题。我 发现有人添加了resetMocks: true to the jest.config.js文件。这意味着mock的实现 每次测试前都会重置功能。所以在我们的例子中,模拟 函数在测试运行时被包含在模拟模块中,但是 该模拟已被重置,因此它返回未定义。

关于原始问题构建环境,它看起来像 React-scripts 确实添加了resetMocks: true进入笑话配置。 (https://github.com/facebook/create-react-app/blob/main/packages/react-scripts/scripts/utils/createJestConfig.js#L69 https://github.com/facebook/create-react-app/blob/main/packages/react-scripts/scripts/utils/createJestConfig.js#L69) 但您可以在 package.json 的 jest 键上覆盖它。 (https://github.com/facebook/create-react-app/blob/main/packages/react-scripts/scripts/utils/createJestConfig.js#L74 https://github.com/facebook/create-react-app/blob/main/packages/react-scripts/scripts/utils/createJestConfig.js#L74)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

jest.mock() 内的 jest.fn() 返回未定义 的相关文章

随机推荐