2016-08-16 3 views
2

내가 작성한 코드에 대한 단위 테스트를 작성하려고하는데 문제는 내가 실행 한 문제는 모의 콜백이 함수를 실행 한 후 호출되지만 내 테스트가 실패 할 것으로 예상된다는 것이다. 절대로 불리지 않는다. 이 기능은 테스트중인Jasmine Testing 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() 및 플래그를 사용하여 제안한 것을 사용했지만 시도했지만 행운이 없었습니다. 이 문제에 대한 몇 가지 지침을 고맙게 생각합니다.

답변

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