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

使用Mongo Memory Server测试时,mongoose.connection.readyState触发TypeError

问题:mongoose.connection 为 undefined(Mongo Memory Server 单元测试场景)

之前一直用Mongo Memory Server做单元测试,运行正常,但现在mongoose.connection返回undefined,原本以为readyState至少会返回0。代码如下:

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

let con: mongoose.Connection;
let mongoServer: MongoMemoryServer;

export const connectDB = async () => {
  mongoServer = await MongoMemoryServer.create();
  await mongoose.connect(mongoServer.getUri(), {})
  .catch((err) => {
    console.log(err); // 没有抛出错误
  });
  con = mongoose.connection; // 这里是undefined,为什么?
  console.log(con.readyState); // 这行触发错误
}

可能的原因及解决办法

  • 导入方式错误:
    部分新版本的mongoose中,import * as mongoose from 'mongoose'会导入整个模块对象而非mongoose实例,导致mongoose.connection不存在。可尝试修改为默认导入:

    import mongoose from 'mongoose';
    

    若必须使用星号导入,可通过mongoose.default.connection获取连接实例。

  • Mongo Memory Server 创建失败:
    当前代码仅捕获了mongoose.connect的错误,但MongoMemoryServer.create()可能因端口占用、依赖缺失等原因静默失败,导致后续连接无效。建议给整个流程加上完整错误捕获,并打印内存Mongo的URI确认有效性:

    export const connectDB = async () => {
      try {
        mongoServer = await MongoMemoryServer.create();
        const mongoUri = mongoServer.getUri();
        console.log('内存Mongo URI:', mongoUri); // 确认URI是否正常生成
        await mongoose.connect(mongoUri, {});
        con = mongoose.connection;
        console.log('连接状态:', con.readyState);
      } catch (err) {
        console.error('连接流程错误:', err);
      }
    }
    
  • 版本兼容性问题:
    检查mongoose和mongodb-memory-server的版本是否匹配。mongodb-memory-server依赖的mongodb版本,需要与mongoose支持的mongodb版本一致。可查看两者官方文档确认兼容范围,或尝试降级/升级其中一方版本。

  • 连接配置缺失:
    新版mongoose(6.x+)移除了useNewUrlParser、useUnifiedTopology等默认配置,若连接异常,可尝试显式添加必要配置:

    await mongoose.connect(mongoUri, {
      useNewUrlParser: true,
      useUnifiedTopology: true
    });
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 10:00:12