【发布时间】:2013-07-07 01:18:47
【问题描述】:
我对单元测试 javaScript、angularJS 和 Karma 完全是个菜鸟。我已经能够为控制器编写通过测试,但是现在我正在尝试测试服务,我收到以下错误:Unknown provider <- nProvider <- User 其中 User 是我的服务的名称,我可以告诉, "n" 是该服务的 $http 依赖项(已缩小)。这是我的用户服务(TypeScript):
/// <reference path="../../lib/angular/angular.d.ts" />
module MyApp.Services{
export class UserService{
private _apiBase: string = "api/";
constructor(private $http: ng.IHttpService, private $q: ng.IQService) {
}
getUser(userSearchParams: string): ng.IPromise{
var deferred = this.$q.defer();
this.$http.get(this._apiBase + "Users/" + userSearchParams).success((data) => {
deferred.resolve(data);
}).error(() => {
deferred.reject();
});
return deferred.promise;
}
}
}
这是我的通用 Services.ts 文件:
/// <reference path="../_all.d.ts" />
'use strict'
var mod = angular.module('MyApp.Services', []);
mod.factory('User', [<any>"$http", <any>"$q", function ($http, $q) {
return new MyApp.Services.UserService($http, $q);
}]);
最后,我的测试脚本:
'use strict';
describe('UserServiceTests', function () {
beforeEach(module('main')); //this is my main angular module - set up in app.ts
it('should issue a GET request to api/Users/whatever when the search parameter is whatever', inject(function(User) {
expect(2).toBe(2);
}));
})
我创建了另一个具有相同结构的测试应用程序,但没有收到上述错误。我不知道我错过了什么。让我知道是否还有其他需要发布的内容才能找到问题。任何帮助表示赞赏。
编辑:经过大量搜索和阅读,这似乎与依赖注入 here 和 here 有关。缩小后,参数名称会更改,从而导致错误。作为证据,如果我删除最小文件并重新运行测试,它们就会通过。
$inject 函数可用于解决此问题,但当控制器使用 TypeScript 创建为类时,我不知道如何解决此问题。我不确定是否可以使用 $routeProvider.when 的 resolve 属性。
【问题讨论】:
标签: angularjs typescript karma-runner