after() 呼び出しでクリーンアップを行い、他の記述よりも前に行います。すべてのテストに合格すると、クリーンアップが機能します。ただし、いずれかのテストが失敗した場合、クリーンアップ コードは [エラー: 開いている接続がありません] というエラーを受け取ります。
mongodb のコールバックでのアサーションがエラーをスローし、接続が閉じられたと思います。それは私を混乱させます:
- まず、mongodb のコールバックは、いくつかのアサーションを配置するのに適切な場所だと思います。
- 次に、アサーションが失敗するとエラーが発生し、接続が閉じられます。
- 最後に、接続が閉じられたため、クリーンアップは失敗します。
では、アサーションが失敗した場合でもクリーンアップを行うには、他に何をすべきでしょうか?
以下のサンプルコードを作成しました。
var mongo = require('mongoskin')
, should = require('should')
;
describe('mongo', function() {
var db;
before(function() {
console.log('before');
db = mongo.db('devstack.local:27017/test')
});
after(function(done) {
console.log('after');
db.dropDatabase(function(err) {
should.not.exist(err);// [Error: no open connections]
db.close(done);
});
});
describe('close', function() {
it('should count!=0', function(done) {
db.collection('empty').count(function(err, count) {
count.should.not.equal(0); // use an empty collection to make sure this fail
done();
});
})
})
})