我在尝试设置用于测试目的的数据库时遇到了一些麻烦。应删除存储在数据库中的数据,并为每个测试重新填充。我目前正在做以下事情:数据库.jsconst mongoose = require('mongoose');// a Mongoose model describing an entityconst Entity = require('entity-model');// entities.mock is an array containing entity objects.const mockedEntities= require('./entities.mock');function setUp() { Entities.collection.insertMany(mockedEntities);}function breakDown() { mongoose.connection.on('connected', () => { mongoose.connection.db.dropDatabase(); });}module.exports = { setUp, breakDown };然后在我的test.js 中:const db = require('./db');describe('e2e tests to make sure all endpoints return the correct data from the database', () => { beforeEach(async () => { await db.breakDown(); db.setUp(); }); it('should check store-test-result (UR-101)', (done) => ...perform test); it('should check store-nirs-device (UR-102)', (done) => ...perform test);});在正确重新填充数据库之前,我似乎没有清空数据库。关于可能是什么原因的任何建议?
1 回答
拉莫斯之舞
TA贡献1820条经验 获得超10个赞
我最终做了:
beforeEach(async () => {
await MyEntity.collection.drop();
await MyEntity.collection.insertMany(mockedMyEntity);
});
这解决了我的问题。
如果这导致 Mongo Error ns not found,您需要在删除它之前在数据库中显式创建集合。如果集合不存在,就会发生这种情况。您可以通过添加之前来做到这一点:
before(async () => {
await MyEntity.createCollection();
});
不要在模型中将 option: autoCreate 设置为 true ,因为根据https://mongoosejs.com/docs/guide.html#autoCreate在生产中不应将其设置为 false 。
添加回答
举报
0/150
提交
取消