2016-08-16 4 views
2

Ich versuche Unit-Tests für einige Code zu schreiben Ich schrieb, das Problem, das ich renne ist, ich erwarte, dass mein Schein Callback nach der Ausführung der Funktion aufgerufen wird, aber mein Test fehlschlägt als es wird nie genannt.Jasmine Testing Node.js Async-Module

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(); 
    }); 
}); 

Die Funktion getestet werden, ist ganz einfach:

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); 
    } 
} 

Das Problem, das ich ist vermuten, Jasmin Prüfung der Erwartung, bevor der Mock Rückruf in API-Aufruf ausgeführt wird aufgrund asynchroner Natur Anfrage. Ich habe versucht, zu verwenden, was andere vorschlagen, done() und Flaggen zu verwenden, aber ohne Glück. Ich würde mich über einige Hinweise in dieser Angelegenheit freuen.

Antwort

3

Ihr beforeEach Code ist asynchron. Sie müssen Yasmin sagen, wenn Ihre beforeEach Logik fertig ist. Sie können dies mit der Callback-Methode done lösen, die an jeden Test übergeben wird. Versuchen Sie Folgendes:

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(); 
    }); 
}); 
Verwandte Themen