0

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
4

1 に答える 1

0

これは Mockgoose@5.2.4 のバグであることが判明し、5.3.3 にアップグレードするとこれが解決されました (しかし、他の何かが壊れました :( )

于 2016-02-17T19:26:45.033 に答える