У меня довольно простой сервис, который в основном улавливает ошибку, улучшает их с определенным типом ошибки и сообщением об ошибке и транслирует событие ошибки, чтобы части моего приложения могли справиться с этой проблемой. Упрощенная версия может быть найдена here.Угловая Жасмин Сервис Тестирование вещания не называется
Сервис выглядит примерно так:
angular
.module('app', [])
.factory('errors', function ($rootScope) {
function broadcast (error) {
$rootScope.$broadcast('err:'+error.type, error.message, error.error);
}
return {
catch: function (type, message) {
return function (error) {
broadcast({
type: type,
message: message,
error: error
});
};
}
};
});
Теперь я хотел бы проверить с жасмином, если эта услуга на самом деле транслировать ошибку.
Для этого я написал следующий тест.
describe("errors: Errors (unit testing)", function() {
"use strict";
var errors,
rootScope;
beforeEach(function(){
module('app');
inject(function (_errors_, $injector) {
errors = _errors_;
rootScope = $injector.get('$rootScope');
spyOn(rootScope, '$broadcast');
});
});
it('should broadcast error event', inject(function ($q) {
$q.reject('error')
.catch(errors.catch('type', 'message'));
expect(rootScope.$broadcast).toHaveBeenCalled();
}));
К сожалению, тест никогда не проходит, потому что rootScope.$broadcast
никогда не вызывается.
Я не уверен, но я предполагаю, что это имеет какое-то отношение к тому факту, что трансляция инкапсулирована в приватную функцию broadcast
. Кто-нибудь есть идея, как пройти тест?
Ого, спасибо, что было на самом деле легко исправить! Я должен был подумать об этом. :) –
@Flek приветствую .. :) – PSL