簡體   English   中英

因果不明的提供者錯誤

[英]Karma unknown provider error

我對單元測試javaScript,angularJS和Karma完全陌生。 我已經能夠為控制器編寫通過測試,但是現在嘗試測試服務,則出現以下錯誤: Unknown provider <- nProvider <- User其中User是我的服務名稱,據我所知,“ n”是該服務的$ http依賴關系(最小)。 這是我的UserService(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);
}));

})

我用相同的結構創建了另一個測試應用程序,但沒有得到上面看到的錯誤。 我不知道我在想什么。 讓我知道是否還有什么需要發布才能發現問題。 任何幫助表示贊賞。

編輯:經過大量搜索和閱讀,看來這與這里此處的依賴項注入有關。 縮小后,參數名稱會更改,從而導致錯誤。 作為證明,如果我刪除了min文件並重新運行測試,它們將通過。

$ inject函數可用於解決此問題,但是當使用TypeScript將控制器作為類創建控制器時,我看不到如何做到這一點。 我不確定是否可以使用$ routeProvider.when的resolve屬性。

好的,我找到了這篇文章,這使我得以解決此問題。 通過為我的TypeScript類添加“注入”屬性(在數組中具有適當的值),Angular知道如何處理DI。 我看到的唯一缺點是,在依存關系列出的順序中可能會出錯,或者在以后添加新的依存關系的情況下會遺漏。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM