2016-04-25 16 views
0

以下のコードでは、非同期モジュールの助けを借りて2つの関数が同時に実行されます。両方の関数の結果が得られると、最終関数dosomething3()が呼び出されます。適切なコールバックが呼び出された場合、どうすればテストできますか?asyncモジュールでコールバックが期待どおりに呼び出されているかどうかをテストするにはどうすればよいですか?

async.parallel([ 
    function(cb) { 
     doSomething1(function(err, result) { 
      if (err) return cb(err); // WANT TO TEST 
      cb(null, result); //WANT TO TEST 
     }); 
    }, 

    function(cb) { 
     doSomething2(function(err, result) { 
      if (err) return cb(err); // WANT TO TEST 
      cb(null, result); //WANT TO TEST 
     }); 
    } 

], function(err, data) { 
    if (err) return handleError(err); //WANT TO TEST 
    var result1 = data[0]; 
    var result2 = data[1]; 

    dosomething3(result1, result2, function(err) { 
     if (err) return handleError(err); 
     process.exit(0); 
    }) 
}); 
+0

どの様にconsole.log 'IF(ERR){にconsole.log( 'doSomething1エラー'、ERR)を用いて約。戻り値cb(err); } 'と同様に各コールバック – Molda

+0

はい、console.logを使用するか、ブレークポイントを管理するIDEでコードを実行します。 –

+0

コールバックコールをデバッグするか、すべてのコールバックがエラーなくコールされたことを確認しますか? –

答えて

0

あなたはユニットテストを書きたい場合は、機能doSomething1、doSomething2、dosomething3、handleErrorのためのモックを記述する必要があります。したがって、テストケースによっては、これらの関数からエラーを設定する(または設定しない)ことができます。例えば

、doSomething1のためのモックは、()(それはsinonテスト関数呼び出しのためのツールを提供し、単なるアイデアだhereを参照してください。)次のようになります。

// global variables that are used to controll data passed in callback of doSomething1() 
var doSomething1Error = null, 
    doSomething1result = [], 
    doSomething1CallCount = 0; 
// the mock 
function doSomething1(cb) { 
    doSomething1CallCount++; 
    cb(doSomething1Error, doSomething1result); 
} 

、その後、あなたのテストケースが見えますこの

describe('doSomething1 ', function() { 
    beforeEach(function(done) { 
    // reset global vars used by mock 
    doSomething1Error = null; 
    doSomething1result = []; 
    doSomething1CallCount = 0; 
    }); 

    it('is called once with error', function() { 
    doSomething1Error = 'User does not exist'; 
    // call you code under test (async.parallel([.....])) 

    // check that doSomething1CallCount == 1 
    // check that mock for handleError was called with 'User does not exist' error 
    }); 

})

関連する問題