使用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
相关产品推荐
相关产品推荐

