使用Jest 29测试Next.js应用时遇ReferenceError: setImmediate未定义
解决Jest 29 + Next.js测试中
setImmediate is not defined错误 这个问题是因为Jest 29配套的jsdom版本(v20+)移除了setImmediate全局API,但你的项目依赖(可能是React内部逻辑、Next.js底层处理,或是第三方组件库)隐式调用了它。以下是几种可行的解决方式:
方式一:全局配置添加模拟
- 在项目根目录创建
jest.setup.js文件,写入:global.setImmediate = global.setTimeout; - 在
jest.config.js(或next.config.js的jest配置块)中指定这个setup文件:module.exports = { // 其他配置项... setupFilesAfterEnv: ['<rootDir>/jest.setup.js'], testEnvironment: 'jsdom' };
方式二:直接在Jest配置中定义全局变量
如果不想额外创建setup文件,可直接在jest.config.js的globals字段中添加:
module.exports = { // 其他配置项... testEnvironment: 'jsdom', globals: { setImmediate: global.setTimeout } };
方式三:单个测试文件临时修复
如果仅个别测试文件出现问题,可在该文件顶部添加:
global.setImmediate = global.setTimeout;
原理说明:setImmediate和setTimeout(callback, 0)在浏览器环境中的行为高度相似,用setTimeout替代可满足大多数依赖的调用需求。
内容的提问来源于stack exchange,提问作者Merji
相关产品推荐
相关产品推荐

