由Yeoman生成的测试角度工厂/服务

时间:2013-12-11 22:49:00

标签: unit-testing angularjs yeoman

我用自耕农创建了一个应用程序

yo angular --minsafe

我想测试我创建的工厂/服务

yo angular:factory analyticsService

生成/app/scripts/services/analyticsService.js

'use strict';

angular.module('angularPlaygroundApp')
  .factory('analyticsService', function ($resource) {
    // Service logic
    // ...

    var meaningOfLife = 42;

    // Public API here
    return {
      someMethod: function () {
        return meaningOfLife;
      }
    };
  });

和测试/test/spec/services/analyticsService.js

'use strict';

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

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

  // instantiate service
  var Analyticsservice;
  beforeEach(inject(function (_Analyticsservice_) {
    Analyticsservice = _Analyticsservice_;
  }));

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

});
  

运行grunt测试会为服务生成以下失败的测试

     

跑“业力:单位”(业力)任务INFO [业力]:业力v0.10.8服务器   started at http://localhost:8080 / INFO [launcher]:启动浏览器   Chrome WARN [观察者]:模式   “/Users/lsims/projects/angular-playground/test/mock/*/.js”没有   匹配任何文件。信息[Chrome 31.0.1650(Mac OS X 10.9.0)]:已连接   在插座MTgYIXPHDT3JCSNU0ww9 Chrome 31.0.1650(Mac OS X 10.9.0)   服务:Analyticsservice应该做一些FAILED错误:   [$ injector:unpr]未知提供商:AnalyticsserviceProvider< -   Analyticsservice

我的问题是如何在Angular中测试工厂/服务,更具体地说,如何测试Yeoman生成的服务和/或工厂?

提前致谢

1 个答案:

答案 0 :(得分:4)

它们的测试与您所描述的非常完全相同。但是,JavaScript区分大小写,并且您已更改了注入器要搜索的内容。

  

analyticsService!= Analyticsservice

_Analyticsservice_语法允许您在下划线中包装服务的文字值,以便您可以将局部变量命名为相同的内容。因此,向inject询问_Analyticsservice_是否要求使用字符串"Analyticsservice"命名的服务。定义名为"analyticsService"

的服务后

所以,我想你想要:

'use strict';

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

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

  // instantiate service
  var analyticsService;
  beforeEach(inject(function (_analyticsService_) {
    analyticsService = _analyticsService_;
  }));

  it('should do something', function () {
    expect(!!analyticsService).toBe(true);
  });
angular中的

injector始终将名称Provider附加到manage中对象的末尾。该错误告诉您注入器无法找到名为"AnalyticsserviceProvider"的对象。