Lab とMockgooseを使用して Mongoose モデルの単体テストをいくつか作成しています。Labs メソッドで DB 接続を開きlab.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