如何确保mongoose.dropDatabase()只能在连接到mongo内存服务器时调用



我们使用mongodb内存服务器进行单元测试。在我们执行的每个单元测试套件之后:

await connection.dropDatabase();
await collection.deleteMany({});

要设置猫鼬,我们有两种不同的方法:

setupMongoose(); <--- Connects to our dev database in the cloud (Atlas)
setupMongooseWithMemoryServer(); <---- Connects mongoose to memory server. 

我们是一个开发团队,我最担心的是有人使用";setupMongoose(("有一天错误地设置单元测试。如果发生这种情况,将为我们的";真实的";dev数据库。那将是一场灾难。

那么,我如何确保dropDatabase((和collection.deleteMany({}(永远不会在我们的云数据库上调用呢

一些想法:我已经考虑过设置env变量,并在调用危险的方法之前进行检查。我也已经做了运行时间检查:

checkForUnitTestEnv() {
if (!this.init || process.env.JEST_WORKER_ID === undefined) {
console.error('FATAL TRIED TO DROP DATABSE WITHOUT JEST!');
throw 'FATAL TRIED TO DROP DATABSE WITHOUT JEST!';
}
}

(this.init仅在内存服务器已初始化时为true(。

但这些方法并不是傻瓜式的。如果我们的开发人员不小心,错误仍然可能发生。所以我希望要么能做到";非法操作";如果可能的话,与我们的数据库提供商(Atlas(联系,或者在调用危险方法之前在运行时检查mongoose连接uri(但我还没有找到好的方法(。

setupMongooseWithMemoryServer删除数据库而不是每个测试怎么样?

export function setupMongooseWithMemoryServer() {
beforeAll(async () => {
await mongoose.connect(process.env.FAKE_CONNECTION_STRING});
});
afterAll(async () => {
await mongoose.connection.dropDatabase();
await mongoose.disconnect();
});
}

最新更新