【问题标题】:Karma unknown provider errorKarma 未知提供程序错误
【发布时间】: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);
}));

})

我创建了另一个具有相同结构的测试应用程序,但没有收到上述错误。我不知道我错过了什么。让我知道是否还有其他需要发布的内容才能找到问题。任何帮助表示赞赏。

编辑:经过大量搜索和阅读,这似乎与依赖注入 herehere 有关。缩小后,参数名称会更改,从而导致错误。作为证据,如果我删除最小文件并重新运行测试,它们就会通过。

$inject 函数可用于解决此问题,但当控制器使用 TypeScript 创建为类时,我不知道如何解决此问题。我不确定是否可以使用 $routeProvider.when 的 resolve 属性。

【问题讨论】:

    标签: angularjs typescript karma-runner


    【解决方案1】:

    好的,我找到了this 帖子,这让我能够解决问题。通过将“注入”属性添加到我的 TypeScript 类(在数组中具有适当的值),Angular 知道如何处理 DI。我看到的唯一缺点是列出依赖项的顺序可能会出错,或者在以后添加新依赖项时会出现遗漏。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-28
      • 2015-09-14
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      • 2016-04-01
      相关资源
      最近更新 更多