Angular JS Unit Testing $httpBackend spec не имеет ожиданий
У меня есть unit test, в котором единственное ожидание заключается в том, что был сделан http-вызов. Для этого я использую $httpBackend.expect(). Это отлично работает, а unit test терпит неудачу, если этот HTTP-запрос не сделан (что хорошо) и проходит, если был сделан запрос http.
Проблема в том, что даже подумал, что это проходит, Jasmine spec runner показывает, что "SPEC HAY NO EXPECTATIONS" для этого unit test, что заставляет меня думать, что я не использую рекомендуемый способ проверить, что был сделан http-вызов. Как избежать этого сообщения?
Пример теста:
it('should call sessioncheck api', function () {
inject(function ($injector, SessionTrackerService) {
$httpBackend = $injector.get('$httpBackend');
var mockResponse = { IsAuthenticated: true, secondsRemaining: 100 };
$httpBackend.expect('GET', 'API/authentication/sessioncheck')
.respond(200, mockResponse);
SessionTrackerService.Start();
jasmine.clock().tick(30001);
$httpBackend.flush();
});
});
Ответы
Ответ 1
Я завершаю вызов, чтобы выполнить флеш следующим образом:
expect($httpBackend.flush).not.toThrow();
Я предпочитаю этот подход, потому что в тестовом коде четко указано, что должно произойти, когда вызывается флеш. Например:
it('should call expected url', inject(function($http) {
// arrange
$httpBackend.expectGET('http://localhost/1').respond(200);
// act
$http.get('http://localhost/1');
// assert
expect($httpBackend.flush).not.toThrow();
}));
Ответ 2
Попробуйте удалить jasmine.clock(). tick (30001);
Это избыток в этом коде, если у вас нет тайм-аута внутри метода SessionTrackerService.Start