0

プロジェクトの単体テスト環境をセットアップしようとしていますが、いくつか問題があります。AngularJSコードをテストするためにJasmineでTestacularを使用しようとしています。

ServicesKeepAliveというファクトリメソッドを持つモジュールがあります。これがその設定です。

angular.module('services', []).factory('KeepAlive', ['$rootScope', function($rootScope){
    //My Code
}]);

このモジュールは、と呼ばれるモジュールに接続されていますMainModule。これがそのコードです。

angular.module('MainModule', ['filters', 'services', 'directives', 'ui'])
.config(['$httpProvider', function($httpProvider){
    //My Code
}]).run(['$rootScope', '$timeout', '$routeParams', 'KeepAlive', function($rootScope, $timeout, $routeParams, KeepAlive){
    //My Code
}]);

そこで、テスト用にこのコードを追加したいと思います。これが私のtestacularファイルの設定です。

     JASMINE,
     JASMINE_ADAPTER,
     'assets/lib/jquery/jquery-1.7.1.js',
     'assets/lib/angular/angular.js',
     'assets/lib/angular/angular-ui.js',
     'jsTests/MockingLib/angular-mocks.js',
     'assets/scripts/modules/Admin.js',
     'assets/scripts/modules/MainModule.js',
     'assets/scripts/services/KeepAlive.js',
     'assets/scripts/services/Admin.js',
     'assets/scripts/filters.js',
     'assets/scripts/directives.js',
     'assets/scripts/controllers/admin/*.js',

今、これは私のtestacularコンソールでエラーをスローしています。これが私が得ているエラーです。

Error: Unknown provider: KeepAliveProvider <- KeepAlive
     at Error (<anonymous>)
     at d:/Work/Workspace/TalentNetwork/assets/lib/angular/angular.js:2627:8
     at Object.getService [as get] (d:/Work/Workspace/TalentNetwork/assets/lib/angular/angular.js:2755:32)
     at d:/Work/Workspace/TalentNetwork/assets/lib/angular/angular.js:2632:38
     at getService (d:/Work/Workspace/TalentNetwork/assets/lib/angular/angular.js:2755:32)
     at Object.invoke (d:/Work/Workspace/TalentNetwork/assets/lib/angular/angular.js:2773:6)
     at d:/Work/Workspace/TalentNetwork/assets/lib/angular/angular.js:2637:71
     at Array.forEach (native)
     at forEach (d:/Work/Workspace/TalentNetwork/assets/lib/angular/angular.js:110:11)
     at Object.createInjector [as injector] (d:/Work/Workspace/TalentNetwork/assets/lib/angular/angular.js:2637:3)

これが私のジャスミンテストケースです。

beforeEach(function () {
    admin = module("MainModule");
    module("services");
});

何が足りないの?私はtestacularに不慣れです。前もって感謝します。

4

1 に答える 1

4

エラーは、誰かが「KeepAlive」と呼ばれるサービスを要求したが、インジェクターがそれを作成する方法を知らないことを示しています(そのプロバイダーはありません)。

つまり、おそらくモジュールをロードしていません。

本番環境でアプリをブートストラップするときは、アプリをng-app="something"指定します。これにより、ロードするモジュールがAngularに指示されます。同様に、テスト中にロードするモジュールを指定する必要があります。

これで問題が解決するはずです。

beforeEach(module('services'));
于 2013-03-16T22:02:33.360 に答える