2016-08-16 7 views
2

私が書いたコードの単体テストを書こうとしていますが、実行中の問題は関数を実行した後にモックコールバックが呼び出されることです決して呼ばれない。ジャスミンテストNode.js非同期モジュール

describe("Asynchronous specs", function() { 

    var mockNext; 

    beforeEach(function() { 
     mockNext = jasmine.createSpy('mockNext'); 
     var res; 
     parallelRequests.APICall(testObject[0], null, mockNext); 
    }); 

    it("callback spy should be called", function() { 
     expect(mockNext).toHaveBeenCalled(); 
    }); 
}); 

テストされている機能は非常に簡単です:

function APICall(options, res, next) { 
     request(options, callback); 
     function callback(error, response, body) { 
     if (error) { 
      if (error.code === 'ETIMEDOUT') { 
       return logger.error('request timed out: ', error); 
       next(error); 
      } 
      logger.error('request failed: ', error); 
      next(error); 
     } 
     next(null); 
    } 
} 

モックコールバックが原因要求の非同期性のためにAPI呼び出しで実行される前に、私は疑う問題は期待をテストジャスミンです。 done()とflagsを使って他の人が示唆しているものを使用しようとしましたが、運がありません。この問題についていくつかの指導を感謝します。

答えて

3

beforeEachコードは非同期です。あなたのbeforeEachロジックが完了したら、yasminに伝える必要があります。コールバックメソッドdoneで解決できます。これは各テストに渡されます。試してみてください:

describe("Asynchronous specs", function() { 

    var mockNext;   

    beforeEach(function(done) { 

     parallelRequests.APICall(testObject[0], null, function(){ 
      mockNext = jasmine.createSpy('mockNext'); 
      mockNext(); 
      done(); 
     }); 
    }); 

    it("callback spy should be called", function() { 
     expect(mockNext).toHaveBeenCalled(); 
    }); 
}); 
関連する問題