为 e2e 测试设置数据库失败:E11000 重复键错误收集

我在尝试设置用于测试目的的数据库时遇到了一些麻烦。应删除存储在数据库中的数据,并为每个测试重新填充。我目前正在做以下事情:


数据库.js


const mongoose = require('mongoose');


// a Mongoose model describing an entity

const 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);

});

在正确重新填充数据库之前,我似乎没有清空数据库。关于可能是什么原因的任何建议?


阿波罗的战车
浏览 120回答 1
1回答

拉莫斯之舞

我最终做了: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 。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript