Я пытаюсь проверить следующий метод:
function get(url, options) {
var headers = {
'X-Request-ID': main.guid(),
'X-Tenant-ID': tenantId
};
if (options.headers) {
headers = Object.assign(headers, options.headers);
}
var responseType = options.responseType || undefined;
return $http
.get(url, {headers: headers, responseType: responseType})
.then(function(response) {
if (options.transformResponse) {
options.transformResponse(response);
}
return response.data;
})
.catch(function(reason) {
if (options.is404Logged === false && reason.status === 404) {
return;
}
exceptionService.handleError(reason);
});
}
Вот два моих теста.Я хочу проверить, что метод exceptionService.handleError
вызывается или не вызывается в зависимости от переданного объекта options
. Другими словами, я пытаюсь проверить, что происходит в блоке catch
в методе выше.
describe("httpClientService", function() {
var httpClientService, exceptionService, $httpBackend;
beforeEach(function() {
module("bridge.services");
});
describe('get()', function() {
beforeEach(function() {
inject(function($injector) {
httpClientService = $injector.get('httpClientService');
exceptionService = $injector.get('exceptionService');
$httpBackend = $injector.get('$httpBackend');
});
})
describe("404 response", function() {
it('logs 404 when no options provided', function() {
var url = 'https://wwww.example.com';
var response = {
status: 404
};
$httpBackend.when('get', url).respond(response);
spyOn(exceptionService, 'handleError');
httpClientService
.get(url)
.then(function() {
expect(exceptionService.handleError).toHaveBeenCalled();
});
});
it('does not log 404 when is404Logged is false', function() {
var url = 'https://wwww.example.com';
var options = {
is404Logged: false
};
var response = {
status: 404
};
$httpBackend.when('get', url).respond(response);
spyOn(exceptionService, 'handleError');
httpClientService
.get(url, options)
.then(function() {
expect(exceptionService.handleError).not.toHaveBeenCalled();
});
});
});
});
});
По непонятным причинам, когда я запускаю свои тесты, они вообще не выполняют утверждений.Я могу поместить оператор console.log
внутри блока then
(в тесте), и ничего не регистрируется.Мои тесты проходят независимо от того, что я утверждаю.
Я пытался использовать whenGET
вместо when
на $httpBackend
объекте.Я также пытался использовать $httpBackend.flush()
, чтобы гарантировать, что ложный вызов API будет разрешен, когда произойдут утверждения.
Тесты «проходят», потому что утверждения не выполняются.Я хотел бы, чтобы утверждения имели место, тогда мои тесты добавят ценность.