为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

阿波罗的战车 2022-01-01 20:33:18
我在尝试设置用于测试目的的数据库时遇到了一些麻烦。应删除存储在数据库中的数据,并为每个测试重新填充。我目前正在做以下事情:数据库.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 。


查看完整回答
反对 回复 2022-01-01
  • 1 回答
  • 0 关注
  • 119 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信