我正在使用 Lab 和Mockgoose为我的 Mongoose 模型创建一些单元测试,并且我正在通过 Labslab.before()
方法打开数据库连接,然后在 labslab.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 )
然后它工作得很好。但是如果我模拟一个测试用例失败,那么“ Closing ”和“ Closed ”都会出现在控制台中,但连接本身永远不会关闭......它只是挂在那里直到我点击 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