私は、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);
}));
}))
同じ構造の別のテスト アプリを作成しましたが、上記のエラーは発生しません。何が欠けているのかわからない。問題を見つけるために投稿する必要があるものが他にある場合はお知らせください。どんな助けでも大歓迎です。
編集:多くの検索と読み取りの後、これは依存性注入hereおよびhereに関連しているようです。縮小すると、パラメーター名が変更されるため、エラーが発生します。証拠として、最小ファイルを削除してテストを再実行すると、合格します。
$inject 関数を使用してこれを修正できますが、コントローラーが TypeScript を使用してクラスとして作成されている場合、その方法がわかりません。$routeProvider.when の resolve プロパティを使用できるかどうかわかりません。