Javascript Mongoose模型单元测试-如果任何测试用例失败,连接不会关闭

Javascript Mongoose模型单元测试-如果任何测试用例失败,连接不会关闭,javascript,node.js,unit-testing,mongoose,lab,Javascript,Node.js,Unit Testing,Mongoose,Lab,我正在使用Lab and为我的Mongoose模型创建一些单元测试,我正在通过LabsLab.before()方法打开DB连接,然后在LabsLab.after()中终止数据库连接。我遇到的问题是,如果任何测试用例失败,那么连接将不会关闭,但是lab.after()确实会执行(我添加了一些控制台输出以进行调试) const mongoose=require('mongoose')) const mockgoose=require('mockgoose') const approt=require

我正在使用Lab and为我的Mongoose模型创建一些单元测试,我正在通过Labs
Lab.before()
方法打开DB连接,然后在Labs
Lab.after()中终止数据库连接。我遇到的问题是,如果任何测试用例失败,那么连接将不会关闭,但是
lab.after()
确实会执行(我添加了一些控制台输出以进行调试)

const mongoose=require('mongoose'))
const mockgoose=require('mockgoose')
const approt=require('app-root-path')
鹅(猫鼬)
//在init上创建mongoose连接
之前(功能(完成){
猫鼬mongodb://example.com/TestingDB,函数(err){
完成(错误)
})
})
//完成所有测试后关闭假连接
之后(功能(完成){
console.log('Closing')//显示在控制台中(始终)
mongoose.connection.close(函数(){
console.log('Closed')//也是。始终显示在控制台中
完成()
})
})
const Models=approt.require('./dist/Models')(mongoose)
描述('Foobar',函数(){
描述('.createFoo',函数(){
它(‘创建没有数据的foo’,函数(完成){
//使用空对象执行Foobar.createFoo将填充err
Models.Foobar.createFoo({/*Some Data..*/},(err,Data)=>{
//这将使测试用例失败,因为err将包含一个错误。。
expect(err).to.not.equal(null)
完成()
} )
})
})
})
因此,如果我更改了:

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

原来这是一个错误Mockgoose@5.2.4,升级到5.3.3解决了这个问题(但打破了其他一些:()

从未使用“to.not.equal”断言进行测试,如果有效,我将坚持使用“to.equal”。此外,我在每次测试后建立并关闭连接,或者创建一个变量,在每次测试前将其设置为null。