2014-09-16 5 views
0

У меня довольно простой сервис, который в основном улавливает ошибку, улучшает их с определенным типом ошибки и сообщением об ошибке и транслирует событие ошибки, чтобы части моего приложения могли справиться с этой проблемой. Упрощенная версия может быть найдена 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. Кто-нибудь есть идея, как пройти тест?

ответ

1

Вы отклонили обещание, но вам нужно вызвать цикл дайджеста, прежде чем вы сможете протестировать его, чтобы вызвать обратный вызов ошибки.

Do: -

 $q.reject('error').catch(errors.catch('type', 'message')); 

    rootScope.$digest(); 

    expect(rootScope.$broadcast).toHaveBeenCalled(); 

Demo

+0

Ого, спасибо, что было на самом деле легко исправить! Я должен был подумать об этом. :) –

+0

@Flek приветствую .. :) – PSL