如何为jest-circus模块Mock testTimeout以解决TypeError报错?
Jest 29 快照测试报错:TypeError: Cannot read properties of undefined (reading 'testTimeout') 解决方法
报错信息
FAIL src/components/post/piece/Itemdetail.test.js ● Test suite failed to run TypeError: Cannot read properties of undefined (reading 'testTimeout') at _callCircusHook (node_modules/jest-circus/build/run.js:237:57)
报错根源是jest-circus模块中_state.getState()返回了undefined,导致代码尝试读取testTimeout属性时抛出异常。
解决方法:Mock jest-circus的state模块
方案一:单个测试文件中局部Mock
在你的测试文件(Itemdetail.test.js)顶部添加以下代码,直接Mockjest-circus的state模块:
jest.mock('jest-circus/build/state', () => ({ getState: () => ({ testTimeout: 5000 // 设置合理的超时时间,比如默认5000ms }) }));
这段代码会覆盖原模块的getState方法,让它返回包含testTimeout属性的对象,避免读取undefined的属性。
方案二:全局Mock(适用于多个测试文件报错的情况)
如果多个测试文件都遇到这个问题,可以在Jest配置中设置全局Mock:
- 修改
jest.config.js,添加setupFilesAfterEnv配置:
// jest.config.js module.exports = { // 其他已有配置 setupFilesAfterEnv: ['./jest.setup.js'] };
- 在项目根目录创建
jest.setup.js文件,写入全局Mock代码:
// jest.setup.js jest.mock('jest-circus/build/state', () => ({ getState: () => ({ testTimeout: 5000 }) }));
注意事项
如果你的测试逻辑依赖jest-circus state模块的其他属性,可以在getState的返回对象中补充对应字段,确保测试环境的完整性。
内容的提问来源于stack exchange,提问作者user938363
相关产品推荐
相关产品推荐

