Unit testing 由约曼公司提供的测试工厂/服务

Unit testing 由约曼公司提供的测试工厂/服务,unit-testing,angularjs,yeoman,Unit Testing,Angularjs,Yeoman,我已经用yeoman创建了一个应用程序 yo angular --minsafe 我想测试我创建的工厂/服务 yo angular:factory analyticsService 它生成/app/scripts/services/analyticsService.js 'use strict'; angular.module('angularPlaygroundApp') .factory('analyticsService', function ($resource) {

我已经用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;
      }
    };
  });
'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);
  });

});
以及test/test/spec/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;
      }
    };
  });
'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测试会为服务生成以下失败的测试

运行“karma:unit”(karma)任务信息[karma]:karma v0.10.8服务器
开始于http://localhost:8080
/INFO[launcher]:启动浏览器 Chrome WARN[观察者]:模式 “/Users/lsims/projects/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应执行某些操作失败错误:
[$injector:unpr]未知提供程序:AnalyticsserviceProvider它们的测试与您描述的几乎一样。然而,JavaScript是区分大小写的,您已经改变了注入器将要搜索的内容的大小写

分析服务!=分析服务

\u Analyticsservice\u
语法允许您将服务的文本值用下划线括起来,这样您就可以将局部变量命名为相同的名称。因此,请求
注入
\u分析服务
就是请求使用字符串
命名为“分析服务”
的服务。定义了名为“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
附加到管理中对象的末尾。错误告诉您喷油器找不到名为“AnalyticsserviceProvider”
已定义的对象。

谢谢,就是这样。约曼做得很好,但它(和我)错过了资本化。服务、控制器和指令的约定是什么?它似乎因示例而异,例如MyCtrl vs MyCtrl,MyService vs MyService。angular强制执行的唯一约定是在指令中命名。如果您将一个指令命名为camel大小写为“myDirective”,那么您可以在HTML中以snake大小写为“my directive”,或者camel大小写为“myDirective”,或者(我认为)以冒号“my:directive”引用它。这使得美国可以匹配不同的HTML标准。@binarygiant:你不可能因为没有大写而受到指责。发电机实际上把它弄糟了。完全是同一个问题。这是我第一次体验约曼,这是一次很好的体验,但像这样的小怪癖正在吞噬我的夜晚。