我正在尝试用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:
- 当注释掉与mongo(
client = await mongoose.connect(mongod.getUri());
(的连接并使用mongo-memory-server
(版本:7.6.3(时,以下单元测试通过。另一方面,当该行未被注释掉时,它将失败 - 当注释掉与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,问题就解决了。小心。