0

我正在使用 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
4

1 回答 1

0

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

于 2016-02-17T19:26:45.033 回答