Angular& Jasmine:如何在名称中注入带点的服务

时间:2013-11-13 19:50:39

标签: angularjs testing

我已经获得了以这种方式定义的服务:

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无法推断服务名称。如何注入此服务进行测试?我是否缺少一些替代语法?

1 个答案:

答案 0 :(得分:12)

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

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

注意(来自documentation):

  

重要的是数组中字符串标识符的顺序   与签名中的参数名称顺序相同   工厂功能。除非从中推断出依赖关系   函数签名,就是这个数组有ID和它们的顺序   注入器用于确定哪些服务以及以哪种顺序   注入。