使用 mongodb-memory-server 进行单元测试时获取"RangeError: Maximum call stack size exceeded"



我正在尝试用jest对一些类型脚本逻辑进行单元测试。我使用mongoose是为了与mongo数据库和mongo内存服务器进行交互,以模拟mongodb。

由于不清楚的原因,在运行下面的单元测试时,我得到了以下错误,这似乎是由循环依赖关系引起的。

错误:

● Test suite failed to run
RangeError: Maximum call stack size exceeded
at Object.get [as ObjectId] (node_modules/mongoose/node_modules/mongodb/src/bson.ts:38:3)
at Object.get [as ObjectId] (node_modules/mongoose/node_modules/mongodb/src/bson.ts:38:3)

单元测试:

import mongoose, { Mongoose } from "mongoose";
import { MongoMemoryServer } from "mongodb-memory-server";
describe("test mongo memory server", () => {
let client: Mongoose;
let mongod;
beforeAll(async () => {
mongod = await MongoMemoryServer.create();
client = await mongoose.connect(mongod.getUri());
});
afterAll(async () => {
if (mongod) {
await mongod.stop();
}
});
it("empty test", async () => {
});
});

package.json:中使用的版本

...  "dependencies": {
"typescript": "4.6.3",
"mongoose": "6.2.9", // required for mongo 5.0
},
"devDependencies": {
"jest": "27.5.1",
"mongodb-memory-server": "8.4.2",
}

p.S:

  1. 当注释掉与mongo(client = await mongoose.connect(mongod.getUri());(的连接并使用mongo-memory-server(版本:7.6.3(时,以下单元测试通过。另一方面,当该行未被注释掉时,它将失败
  2. 当注释掉与mongo(client = await mongoose.connect(mongod.getUri());(的连接,但使用最新的mongo-memory-server版本8.4.2时,测试失败

对我来说,jest.config.js中有一些错误。我有这样一行:

moduleDirectories: ["node_modules", "src"], 

当我将其注释掉时,错误消息停止显示。

我今天也遇到了同样的问题,我刚刚删除了node_modules和package-lock.json,npm install‘ed,问题就解决了。小心。

相关内容

最新更新