1

私は、javaScript、angularJS、および Karma の単体テストに完全に慣れていません。コントローラーの合格テストを作成できましたが、サービスをテストしようとすると、次のエラーが発生します: Unknown provider <- nProvider <- UserUser は私のサービスの名前であり、私が知る限り、「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);
}));

}))

同じ構造の別のテスト アプリを作成しましたが、上記のエラーは発生しません。何が欠けているのかわからない。問題を見つけるために投稿する必要があるものが他にある場合はお知らせください。どんな助けでも大歓迎です。

編集:多くの検索と読み取りの後、これは依存性注入hereおよびhereに関連しているようです。縮小すると、パラメーター名が変更されるため、エラーが発生します。証拠として、最小ファイルを削除してテストを再実行すると、合格します。

$inject 関数を使用してこれを修正できますが、コントローラーが TypeScript を使用してクラスとして作成されている場合、その方法がわかりません。$routeProvider.when の resolve プロパティを使用できるかどうかわかりません。

4

1 に答える 1

0

わかりました、この投稿を見つけたので、問題を解決できました。TypeScript クラスに "inject" プロパティを (配列内の適切な値を使用して) 追加することで、Angular は DI の処理方法を認識します。私が見る唯一の欠点は、依存関係がリストされている順序でエラーが発生する可能性があること、または後で新しい依存関係が追加された場合に省略されることです。

于 2013-07-10T13:27:36.473 に答える