Как шпионить за ServiceProvider?

Какие

В моем приложении AngularJS я пытаюсь шпионить за некоторыми внутренностями, такими как angular.module а также serviceProvider,

Как

Мне удалось шпионить за angular.module

var moduleCalls = spyOn(angular, 'module').and.callThrough();
moduleCalls.calls.count() //-> 6

Я пытался шпионить за angular.module(...).service но кажется, что его никогда не называли

var serviceCalls = spyOn(angular.module('MyApp'), 'service').and.callThrough();
serviceCalls.calls.count() //-> 0

или более общий .provider

var serviceCalls = spyOn(angular.module('MyApp'), 'provider').and.callThrough();

Зачем

На данный момент сценарий использования является гипотетическим, когда я хочу иметь возможность проверять все определяемые пользователем компоненты (например, модули, фабрики, службы, директивы, контроллеры и т. Д.) На этапе создания.

В том же духе, возможно ли связать and.callThrough() а также and.callFake() так что я могу опубликовать в журнале аудита.

1 ответ

Как angular.module('myApp').service() на самом деле просто стенография для вызова того же метода на $provide оказание услуг. Я думаю, что вы могли бы шпионить за этими методами регистрации службы, как это:

angular.module('ng').config(function ($provide) {
    serviceCalls = spyOn($provide, 'service').and.callThrough();
});

Я до сих пор не уверен, где и когда ваше приложение будет вызывать .service() функция, но это может работать в модульном тесте с использованием angular-mock.js:

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

  module(function ($provide) {
    serviceCalls = spyOn($provide, 'service').and.callThrough();
});
Другие вопросы по тегам