在一个单元测试中填充mongodb会与另一个单元测试相互影响

时间:2018-03-27 01:50:52

标签: node.js mongodb unit-testing mocha

我正在尝试异步运行所有单元测试,但是调用一个函数来填充数据库中的一些虚拟数据会干扰同时运行并使用相同数据的其他单元测试。< / p>

collectionSeed.js文件:

const {ObjectID} = require('mongodb');

import { CollectionModel } from "../../models/collection";

const collectionOneId = new ObjectID();
const collectionTwoId = new ObjectID();

const collections = [{
  _id: collectionOneId
}, {
  _id: collectionTwoId
}];

const populateCollections = (done) => {
    CollectionModel.remove({}).then(() => {
      var collectionOne = new CollectionModel(collections[0]);
      collectionOne.save(() =>{
        var collectionTwo = new CollectionModel(collections[1]);
        collectionTwo.save(() => {
            done();
        });
      });
    });
};

unitTest1文件:

beforeEach(populateCollections);

it('Should run', (done) => {
 //do something with collection[0]
})

unitTest2文件:

beforeEach(populateCollections);

it('Should run', (done) => {
 //do something with collection[0]
})

我正在运行更改,删除和向数据库添加数据的单元测试,因此使用beforeEach比保持所有数据一致更好,但CollectionModel.remove({})函数通常在两者之间运行一个文件中的it函数和另一个单元测试文件中的第二个it函数,因此一个单元测试工作正常,而第二个it尝试使用的数据不是'存在。

无论如何都要防止不同的单元测试文件相互干扰?

1 个答案:

答案 0 :(得分:0)

我建议您为每个测试文件创建一个数据库,例如向数据库名称添加文件名。所以你只需要处理不干扰同一文件的测试,但你可以忘记其他文件中的测试。

我认为管理灯具是单元测试中最麻烦的部分之一,因此,创建和修复单元测试会变得更加顺畅。

作为权衡,每个测试文件将花费更多的执行时间;但在我看来,在大多数情况下这是值得的。

理想情况下,每个测试应该独立于其他测试,但是,一般来说,这会占用过多的开销,所以我推荐了once per test file方法。