我用自耕农创建了一个应用程序
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生成的服务和/或工厂?
提前致谢
答案 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"
的对象。