1

私の目標は、redis に値を保存するノード モジュールをテストする統合テストを実施することです。テストは次のとおりです。

require('coffee-script');
var should = require('should')
    , redis = require('redis')
    , async = require('async')
    , Domain = require('../index');

async.series([
    function(callback){
        db = redis.createClient();
        callback(null,'zero');
    },
    function(callback){
        db.flushdb( function (err, didSucceed) {
            if(err){
                console.log('error: ' + err.message);
                callback(err, 'one');
            }
        });
        callback(null, 'one');
    },
    function(callback){
        should.exist(Domain);

        domain = new Domain({'attOne':1, 'attTwo':2, 'id':1});

        domain.should.have.property('save');
        domain.should.have.property('attOne');
        domain.should.have.property('attTwo');

        domain.save.should.be.an.instanceof(Function);
        callback(null, 'two');
    },
    function(){
        db.end();
    }
],
    function(err, results){
        if(err){
           console.log('error encountered: ' + err.message);
           db.end();
        }
        console.log('All tests passed');
    }
);

このテストでは、問題は、redis がデータベースをフラッシュする前に redis 接続が閉じられることです (db.end() をまったく削除すると、テストはハングしますが、redis db はフラッシュされます)。どうやら、async.series は、すべての関数が次の関数の前に順番に実行されることを期待しているため、機能していませんか、それとも誤解していますか? フラッシュの前にredis接続が閉じられないように、このテストがシリアルフローで実行されるようにする方法は? ...ここで達成しようとしていることに役立つライブラリ/フレームワークの推奨事項はありますか? ありがとうございました

4

2 に答える 2

0

問題は、redis ハッシュ コマンド (つまり、 flushdb、hgetall ) のコールバックが特定の非同期プロセスを停止せず、ハングすることです。「async」モジュールが適切に停止していないのか、それとも「redis」モジュールに「async」がそのプロセスを閉じることを禁止する別の何かがあるのか​​ わかりません....答えがわかっている場合は、共有してください。

解決策は ' mocha ' テスト フレームワークでした。インストール(つまり、npm install mocha)してから「mocha test/mytest.js」を実行すると、上記のコードを変更せずに終了します... Mocha フレームワークに従ってフォーマットすることさえせずに、テストを実行して正常に終了します。同時に、'node test/mytest.js' で実行するとハングします...なぜそうなるのかの謎はまだ残っています:)

これがお役に立てば幸いです...モカの時間です:)

于 2013-05-23T20:31:27.223 に答える