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

使用mongodb-memory-server与Jest测试时遇MongooseError超时问题

解决Mongoose操作缓冲超时(buffering timed out)问题(mongodb-memory-server + Jest)

出现MongooseError: Operation users.findOne() buffering timed out after 10000ms错误,核心原因是Mongoose执行数据库操作时,并未成功连接到内存MongoDB实例,或连接未完成就启动了测试。以下是针对性解决步骤:

1. 检查测试前置脚本(setup.ts)的连接逻辑

确保所有测试执行前,内存MongoDB已启动且Mongoose连接完成。标准setup.ts实现如下:

import mongoose from 'mongoose';
import { MongoMemoryServer } from 'mongodb-memory-server';

let mongo: MongoMemoryServer;

// 所有测试启动前:启动内存Mongo并建立连接
beforeAll(async () => {
  mongo = await MongoMemoryServer.create();
  const mongoUri = mongo.getUri();
  // 必须等待连接完成,避免异步操作未就绪
  await mongoose.connect(mongoUri);
});

// 每个测试前清空数据库,避免测试间数据污染
beforeEach(async () => {
  const collections = await mongoose.connection.db.collections();
  for (const collection of collections) {
    await collection.deleteMany({});
  }
});

// 所有测试结束后清理资源
afterAll(async () => {
  await mongoose.connection.close();
  await mongo.stop();
});

关键注意点:

  • 必须用async/await等待MongoMemoryServer.create()和mongoose.connect()完成,否则测试会在连接建立前执行。
  • 确认setup.ts的路径在Jest配置中正确(你的package.json里setupFileAfterEnv路径为./src/test/setup.ts,需确保文件存在)。

2. 验证Mongoose模型与测试连接的关联

确保User模型基于全局Mongoose连接创建,而非自定义连接实例:

// src/models/User.ts
import mongoose from 'mongoose';

const userSchema = new mongoose.Schema({
  email: { type: String, required: true },
  password: { type: String, required: true }
});

// 使用全局mongoose.model创建模型,确保关联到测试时的连接
export const User = mongoose.model('User', userSchema);

如果模型使用了自定义连接(如mongoose.createConnection()),需确保该连接也指向内存MongoDB实例。

3. 排查Jest配置问题

确认package.json中的Jest配置满足以下要求:

  • testEnvironment: "node":mongodb-memory-server依赖Node环境,不能使用jsdom。
  • setupFileAfterEnv路径正确:若setup.ts放在其他目录,需调整路径确保Jest能加载到该脚本。

4. 临时开启缓冲禁用(辅助排查)

若以上步骤仍无法定位问题,可在连接时禁用Mongoose的操作缓冲,让错误直接抛出而非等待超时:

await mongoose.connect(mongoUri, {
  bufferCommands: false, // 禁用操作缓冲
  bufferMaxEntries: 0
});

这样如果连接未建立,测试会立即抛出"not connected"错误,帮助快速定位连接问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 14:42:25