You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Jest 29测试Next.js应用时遇ReferenceError: setImmediate未定义

解决Jest 29 + Next.js测试中setImmediate is not defined错误

这个问题是因为Jest 29配套的jsdom版本(v20+)移除了setImmediate全局API,但你的项目依赖(可能是React内部逻辑、Next.js底层处理,或是第三方组件库)隐式调用了它。以下是几种可行的解决方式:

方式一:全局配置添加模拟

  1. 在项目根目录创建jest.setup.js文件,写入:
    global.setImmediate = global.setTimeout;
    
  2. 在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 22:02:32