4

我有一个这样定义的服务:

angular.module("myApp")
  .factory("myService.foo", function () {
    // utterly delightful code
  });

我正在使用 Karma 和 Jasmine 进行测试。在测试中,我对大多数服务器测试都在做这样的事情:

describe('Service: someService', function () {

  // load the service's module
  beforeEach(module('myApp'));

  // instantiate service
  var _someService;
  beforeEach(inject([function (someService) {
    _someService = someService;
  }]));

  it('should do something', function () {
    expect(!!_someService).toBe(true);
  });

});

当我尝试对名为“myService.foo”之类的服务执行相同操作时,它会引发错误(当然):

describe('Service: myService.foo', function () {

  // load the service's module
  beforeEach(module('myApp'));

  // instantiate service
  var _myService;
  beforeEach(inject([function (myService.foo) {
    _myService = myService.foo;
  }]));

  it('should do something', function () {
    expect(!!_myService).toBe(true);
  });

});

由于点语法的明显问题使得 Angular 无法推断服务名称。我怎样才能注入这个服务来测试它?我缺少一些替代语法吗?

4

1 回答 1

12

您可以使用数组表示法,例如:

var _myService;
beforeEach(inject(['myService.foo', function (myService) {
    _myService = myService;
}]));

注意(来自文档):

数组中字符串标识符的顺序与工厂函数签名中参数名称的顺序相同,这一点很重要。除非从函数签名中推断出依赖关系,否则注入器将使用这个带有 ID 及其顺序的数组来确定注入哪些服务以及注入的顺序。

于 2013-11-13T20:06:45.580 回答