Как шпионить за 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();
});