如何监视ServiceProvider?

时间:2014-07-18 19:46:52

标签: javascript angularjs unit-testing jasmine angularjs-module

什么

在我的AngularJS应用中,我试图窥探angular.moduleserviceProvider等内部人员。

如何

我成功地监视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 个答案:

答案 0 :(得分:0)

因为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();
});