2015-12-03 71 views
2

我正在使用Mockgoose/Mongoose(使用Mocha/Chai作为测试套件)运行一系列测试。测试因Mockgoose导致失败导致MongoError:拓扑被破坏

如果我的测试之一发生故障,所有的后续测试的失败,与消息MongoError: topology was destroyed

下面是一些相关的片段(即由于失败的.should.be.deep.equal()):

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 

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

+0

嗨@Zachary Jacobi,我有同样的问题,你有没有找到解决办法? – demsey

+0

我目前没有解决方案。在我的电脑上运行测试时,我使用了-b(break)摩卡标志,它至少可以更容易地滚动浏览错误消息。 我目前的理论是,这是与调用模型.reset()方法时发生的错误或数据库设置期间弹出的错误,在半途杀死该函数并将事物陷入奇怪状态中相关我真的没有证据支持这件事。 –

+0

更新:与模仿#5.3.0和猫鼬#4.2.9这个问题似乎已经纠正自己。我正在使用这个组合,因为它看起来很稳定并且提供了3.2的支持。清理这个bug只是一个我几周以前都没有意识到的好处。 –

回答

0

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

我的最佳猜测的原因是beforeEach mockgoose.reset()在同一时间运行的测试失败,导致复位失败,并陷入不良状态的嘲笑数据库。

相关问题