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

如何配置Jest等待globalSetup执行完成后再启动测试用例

Jest globalSetup 数据库连接未生效问题解决方案

Jest 原生默认会等待 globalSetup 导出的异步函数完全 resolve 后才会启动测试流程,你遇到的问题90%是由进程隔离特性导致的:globalSetup 运行在 Jest 主进程,而每个测试套件运行在独立的 worker 子进程中,主进程建立的数据库连接无法被子进程共享,才会出现首个用例连接失败的现象。

对应解决方案如下:

优先推荐:把连接逻辑移到测试进程初始化配置中

无需使用 globalSetup 做应用层数据库连接,改用 setupFilesAfterEnv 配置实现每个测试进程初始化时建立连接:

  1. 修改 jest.config.js 新增配置:
module.exports = {
  // 保留原有其他配置
  setupFilesAfterEnv: ['<rootDir>/path/to/test-init.js'],
  // 延长超时时间,避免数据库连接未完成就触发超时报错
  testTimeout: 10000
}
  1. 新增对应的 test-init.js 文件:
import { mongoConnect } from "../../server/services/mongo";

// 每个测试进程启动后,所有用例执行前先建立数据库连接
beforeAll(async () => {
  await mongoConnect();
});
  1. 优化 mongoConnect 为单例实现,避免同一进程下重复建立连接:
// server/services/mongo.js 参考实现
import mongoose from 'mongoose';

let cachedConnection = null;

export async function mongoConnect() {
  // 已建立连接的场景直接复用缓存
  if (cachedConnection) return cachedConnection;
  cachedConnection = await mongoose.connect(process.env.TEST_MONGO_URI);
  return cachedConnection;
}

若需保留globalSetup配置

globalSetup 仅适合做全局环境初始化操作,比如启动本地测试数据库实例、初始化测试库表结构等,不要在这里建立应用层数据库连接:

  1. 确保 jest.config.js 正确注册globalSetup:
module.exports = {
  globalSetup: '<rootDir>/path/to/your/global-setup.js',
  // 其他配置保留
}
  1. 应用层数据库连接逻辑还是按照上方 setupFilesAfterEnv 的方式配置即可。

内容的提问来源于stack exchange,提问作者SKeney

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 07:18:01