【问题标题】:How to spy on ServiceProvider?如何监视 ServiceProvider?
【发布时间】:2014-09-10 01:05:01
【问题描述】:

什么

在我的 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() 以便我可以发布到审核日志。

【问题讨论】:

  • 您究竟为什么要监视提供者?你能展示你成功监视模块的代码吗?
  • @runTarm - 我已经用更多信息更新了这个问题。

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


【解决方案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();
});

【讨论】:

    猜你喜欢
    • 2017-12-07
    • 2019-05-03
    • 2021-04-27
    • 2017-10-20
    • 2016-02-17
    • 1970-01-01
    • 2016-09-17
    • 2023-03-10
    • 1970-01-01
    相关资源
    最近更新 更多