【问题标题】:Tests failing with Mockgoose cause MongoError: topology was destroyed使用 Mockgoose 失败的测试导致 MongoError:拓扑被破坏
【发布时间】:2016-03-08 16:16:07
【问题描述】:

我正在使用 Mockgoose/Mongoose 运行一系列测试(使用 Mocha/Chai 作为测试套件)。

如果我的一项测试碰巧失败(即由于失败的.should.be.deep.equal()),那么所有后续测试都会失败并显示消息MongoError: topology was destroyed

这里有一些相关的sn-ps:

mockgoose(mongoose);

before(function(done) {
    mongoose.connect('mongodb://fake.test/TestingDB', function(err) {
        done(err);
    }); 
});

afterEach(function(done) {
    mockgoose.reset();
    done();
});

// Test Cases
describe('Testing the functions that deal with users and locations:', function() {
    // Test Setup
    var req

    beforeEach(function(done) {
        req = {};
        mockgoose.reset();
        done();
    });

    beforeEach(function(done) {
        sensors.create(testData.deviceData, function(err, model) {
            if (err) {console.log(err)};
            done();
        });
    });
    //tests start here

这是我得到的错误示例:

1) Testing functions that use the Furnace collections Testing furnaceOn function Should produce some output:
   Uncaught TypeError: Cannot read property 'should' of undefined
    at C:\Users\Zachary Jacobi\Development\webapp\tests\unit\dbFunctionMockTests.js:417:11
    at Query.<anonymous> (C:\Users\Zachary Jacobi\Development\webapp\lib\dbFunctions.js:499:3)
    at C:\Users\Zachary Jacobi\Development\webapp\node_modules\mongoose\node_modules\kareem\index.js:177:19
    at C:\Users\Zachary Jacobi\Development\webapp\node_modules\mongoose\node_modules\kareem\index.js:109:16

2) Testing functions that use the Furnace collections "before each" hook for "Should produce the same results as the mock up from testData":
   MongoError: topology was destroyed
    at Server.insert (C:\Users\Zachary Jacobi\Development\webapp\node_modules\mongoose\node_modules\mongodb\node_modules\mongodb-core\lib\topologies\server.js:951:49)
    at Server.insert (C:\Users\Zachary Jacobi\Development\webapp\node_modules\mongoose\node_modules\mongodb\lib\server.js:324:17)
    at executeBatch (C:\Users\Zachary Jacobi\Development\webapp\node_modules\mongoose\node_modules\mongodb\lib\bulk\unordered.js:436:23)
    at executeBatches (C:\Users\Zachary Jacobi\Development\webapp\node_modules\mongoose\node_modules\mongodb\lib\bulk\unordered.js:457:5)
    at UnorderedBulkOperation.execute (C:\Users\Zachary Jacobi\Development\webapp\node_modules\mongoose\node_modules\mongodb\lib\bulk\unordered.js:515:44)
    at bulkWrite (C:\Users\Zachary Jacobi\Development\webapp\node_modules\mongoose\node_modules\mongodb\lib\collection.js:582:8)
    at Collection.insertMany (C:\Users\Zachary Jacobi\Development\webapp\node_modules\mongoose\node_modules\mongodb\lib\collection.js:477:44)
    at Collection.insert (C:\Users\Zachary Jacobi\Development\webapp\node_modules\mongoose\node_modules\mongodb\lib\collection.js:753:15)
    at NativeCollection.(anonymous function) [as insert] (C:\Users\Zachary Jacobi\Development\webapp\node_modules\mongoose\lib\drivers\node-mongodb-native\collection.js:136:28)
    at model.Model.$__handleSave (C:\Users\Zachary Jacobi\Development\webapp\node_modules\mongoose\lib\model.js:130:21)
    at model.Model.$__save (C:\Users\Zachary Jacobi\Development\webapp\node_modules\mongoose\lib\model.js:189:9)
    at model.Model.save (C:\Users\Zachary Jacobi\Development\webapp\node_modules\mongoose\lib\model.js:282:17)
    at model._done (C:\Users\Zachary Jacobi\Development\webapp\node_modules\mongoose\node_modules\hooks-fixed\hooks.js:101:24)
    at _next (C:\Users\Zachary Jacobi\Development\webapp\node_modules\mongoose\node_modules\hooks-fixed\hooks.js:64:28)
    at fnWrapper (C:\Users\Zachary Jacobi\Development\webapp\node_modules\mongoose\node_modules\hooks-fixed\hooks.js:186:18)
    at model.Object.defineProperty.value.fn (C:\Users\Zachary Jacobi\Development\webapp\node_modules\mongoose\lib\schema.js:250:9)
    at _next (C:\Users\Zachary Jacobi\Development\webapp\node_modules\mongoose\node_modules\hooks-fixed\hooks.js:62:30)
    at fnWrapper (C:\Users\Zachary Jacobi\Development\webapp\node_modules\mongoose\node_modules\hooks-fixed\hooks.js:186:18)
    at C:\Users\Zachary Jacobi\Development\webapp\node_modules\mongoose\lib\schema.js:233:13
    at complete (C:\Users\Zachary Jacobi\Development\webapp\node_modules\mongoose\lib\document.js:1131:5)
    at C:\Users\Zachary Jacobi\Development\webapp\node_modules\mongoose\lib\document.js:1157:20
    at Mixed.SchemaType.doValidate (C:\Users\Zachary Jacobi\Development\webapp\node_modules\mongoose\lib\schematype.js:654:22)
    at C:\Users\Zachary Jacobi\Development\webapp\node_modules\mongoose\lib\document.js:1153:9

有谁知道这是什么原因造成的,我可以做些什么来解决它?当一个失败的测试导致所有后续测试失败时,很难确定有多少测试实际上失败了。

【问题讨论】:

  • 嗨@Zachary Jacobi,我也有同样的问题,你找到解决办法了吗?
  • 我目前没有解决方案。在我的计算机上运行测试时,我使用 -b (break) mocha 标志,这至少使滚动错误消息更容易。我目前的理论是,这与调用 mockgoose .reset() 方法时发生的错误有关,或者在设置数据库期间弹出错误,在中途杀死该函数并将事物陷入奇怪的状态,但我不真的没有证据支持这一点。
  • 更新:对于 mockgoose#5.3.0 和 mongoose#4.2.9,这个问题似乎已经得到纠正。我正在使用这种组合,因为它看起来很稳定并提供 3.2 支持。清除这个错误只是我几个星期都没有意识到的奖励。

标签: node.js unit-testing mongoose mocking mocha.js


【解决方案1】:

更新到 Mockgoose 5.3.0 和 Mongoose 4.2.9 解决了这个问题。

我对原因的最佳猜测是 beforeEach mockgoose.reset() 在测试失败的同时运行,导致重置失败并且模拟数据库陷入错误状态。

【讨论】:

    猜你喜欢
    • 2015-09-03
    • 2015-07-09
    • 2020-10-23
    • 2016-12-27
    • 2021-04-30
    • 2019-11-14
    • 2019-01-15
    相关资源
    最近更新 更多