【问题标题】:Populating mongodb in one unit test intereferes with another unit test在一个单元测试中填充 mongodb 会干扰另一个单元测试
【发布时间】:2018-09-05 06:59:18
【问题描述】:

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

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 正在尝试使用不存在的数据。

有没有办法防止不同的单元测试文件相互干扰?

【问题讨论】:

    标签: node.js mongodb unit-testing mocha.js


    【解决方案1】:

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

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

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

    理想情况下,每个测试都应该独立于其他测试,但一般来说,这会花费太多开销,因此我建议使用 once per test file 方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-26
      • 2011-09-15
      • 1970-01-01
      • 2019-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多