我正在使用Lab和Mockgoose为我的Mongoose模型创建一些单元测试,并且我通过Labs lab.before()
方法打开了数据库连接,然后数据库连接被杀死在实验室lab.after()
方法中。我遇到的问题是,如果任何测试用例失败,那么连接就不会关闭,但lab.after()
会执行(我添加了一些控制台输出)用于调试)
const mongoose = require('mongoose')
const mockgoose = require('mockgoose')
const appRoot = require('app-root-path')
mockgoose( mongoose )
// Create the mongoose connection on init
before(function(done) {
mongoose.connect('mongodb://example.com/TestingDB', function(err) {
done(err)
})
})
// Close the fake connection after all tests are done
after(function(done) {
console.log('Closing') // Shows in console (always)
mongoose.connection.close(function() {
console.log('Closed') // Also. always shows in console
done()
})
})
const Models = appRoot.require('./dist/models')(mongoose)
describe('Foobar', function () {
describe('.createFoo', function () {
it( 'Creating foo with no data', function( done ) {
// Executing Foobar.createFoo with an empty object WILL populate err
Models.Foobar.createFoo( { /* Some Data.. */ }, ( err, data ) => {
// This will fail the test case, since err will contain an error..
expect( err ).to.not.equal( null )
done()
} )
})
})
})
所以如果我改变了:
expect( err ).to.not.equal( null )
为:
expect( err ).to.equal( null )
然后它完美无缺。但是,如果我模拟测试用例失败,那么" 关闭"和" 关闭"显示在控制台中,但连接本身永远不会关闭...它只是挂在那里直到我按下ctrl + c
我在上面的代码中遗漏了什么?
我查看了正在运行的进程,看看在测试用例失败时是否有处理挂起:
$ ps aux |grep -i [m]ongo
myuser 3666 0.0 0.5 3054308 19176 s003 S+ 2:27PM 0:00.08 node /Users/me/my_project/node_modules/mongodb-prebuilt/binjs/mongokiller.js 3608 3663
答案 0 :(得分:0)
原来这是Mockgoose@5.2.4中的一个错误,升级到5.3.3解决了这个问题(但打破了别的东西:()