0

IDE またはコンソールで nodeunit テストを実行すると、正常に実行されますが、終了できません。助けてください!

var store = require('../lib/db');
var list = require('../source/models/mock_deals');
var logger = require('../lib/logging').logger;

exports.setUp = function(done){
    logger.info('start test...');
    done();
};
exports.tearDown = function(done){
    logger.info('end test...');
    done();
};

exports.testInsertDeal = function(test){
    var length = list.length;
    test.equals(length, 2);
    store.mongodb.open(function(err,db){
        if(err){
            logger.error(err);
            return;
        }
        logger.info("mongodb is connected!");

        db.collection('deals',function(err,collection){
            for(var i=0; i<length; i++){
                var item = list[i];
                collection.insert(item, function(err, result){
                    if(err){
                        logger.error('Fail to insert document deal [' + item.id + ']');
                        return;
                    }
                    logger.info( 'index ' + i + ' : ' +JSON.stringify(item) );
                });
            }
        });
        test.expect(1);
    });
    test.done();
};
4

2 に答える 2

2

mongodbの代わりにmongooseを使用するように変更しました。テストはまだ自動的に終了できませんでした。

しかし、 nodeunitテストのtest.tearDownメソッドでマングースを切断したとき。テストは正しく存在しました。

テストに以下を追加します。

exports.tearDown = function(done){
    mongoose.disconnect(function(err){
        if(err) {
            logger.error(err);
            return;
        }
        logger.info('mongoose is disconnected');
    });
    done();
};

さらに、テストのログインにlog4jsを使用し、 log4jsを で構成するとreloadSecs: 500、テストも存在しません。0に設定reloadSecsした後、テストは正常に存在します。したがって、オプションで logging.json を構成する必要がありますreloadSecs: 0

要約すると、すべてのテスト方法が完了した後、動作する部分がないことを確認する必要があります。その後、テストは正しく存在します。

于 2013-08-02T09:48:03.220 に答える
0

プログラムを終了するタイミングがわかっている場合は、次のコード行を使用して終了できます。

process.exit(0);

ここで、0 はプログラムの戻りコードです。

今、それは本当に問題を解決していません。ここに投稿したコードには表示されていないコールバックがまだ待機しているか、プログラムを稼働させているアクティブな接続が存在する可能性があります。見つけたくない場合は、process.exit を使用してください。どうしても見つけたい場合は、さらに掘り下げる必要があります。私は nodeunit を使用したことはありませんが、プログラムが終了しないようにする内部の仕組みに物を残す他のノードライブラリを使用しました。そのような場合、私は通常、何が起こっているのかを知るために他の人のソース コードを調べようとは思わないので、前述の process.exit 呼び出しを実行します。

これにより、少なくともオプションが提供されるはずです。

于 2013-08-01T14:49:10.423 に答える