2015-03-17 3 views
2

У меня возникли проблемы с издевательской зависимостью следующего сервиса «вещатель» от службы «pushServices».AngularJS и Jasmine: штучные услуги

angular.module('broadcaster', ['pushServices']); 

angular.module('broadcaster').service('broadcaster', [ 
    '$rootScope', '$log', 'satnetPush', 
    function ($rootScope, $log, satnetPush) { 
     // .. contents .. 
    }; 
}; 

Жасмин спецификации выглядит следующим образом:

describe('Test Broadcaster Service', function() { 
    'use strict'; 

    var broadcasterService, mockPushService; 
    beforeEach(module('broadcaster')); 
    beforeEach(inject(function($injector) { 

     broadcasterService = $injector.get('broadcaster'); 
     mockPushService = { 
      getSomething: function() { return 'mockReturnValue'; } 
     }; 

     module(function ($provide) { 
      $provide.value('satnetPush', mockPushService); 
     }); 

    })); 

    it('should return a non-null broadcaster object', function() { 
     expect(broadcasterService).not.toBeNull(); 
    }); 

});

ошибка, что я типичный «Неизвестный поставщик»:

PhantomJS 1.9.8 (Linux) Test Broadcaster Service should return a non-null broadcaster object FAILED 
    Error: [$injector:unpr] Unknown provider: $pusherProvider <- $pusher <- satnetPush <- broadcaster 
    http://errors.angularjs.org/1.3.14/$injector/unpr?p0=%24pusherProvider%20%3C-%20%24pusher%20%3C-%20satnetPush%20%3C-%20broadcaster 

Что я делаю неправильно? Как я должен вместо этого вводить зависимость?

ответ

3

Ключ к $ предоставляет ваш макет службы, прежде чем вы получите тестируемую услугу из $ injector. Тогда 'satnetPush' будет существовать:

describe('Test Broadcaster Service', function() { 
    'use strict'; 

    var broadcasterService, mockPushService; 

    beforeEach(function() { 
     module('broadcaster'); 

     module(function ($provide) { 
      mockPushService = { 
       getSomething: function() { return 'mockReturnValue'; } 
      }; 

      $provide.value('satnetPush', mockPushService); 
     }); 

     inject(function($injector) { 
      broadcasterService = $injector.get('broadcaster'); 
     }) 
    }); 

    it('should return a non-null broadcaster object', function() { 
     expect(broadcasterService).not.toBeNull(); 
    }); 
}); 

Вот working fiddle

Смежные вопросы