0

Angular.js プロジェクトのテストをセットアップしようとしていますが、「$injector:nomod, Module 'result' is not available! You or misspelled...」というエラーが表示され続けます。「karma.config.js」内の「files」配列に「result」モジュールを含めていると確信しています。基本的には次のようになります。

files: [
          '../javascripts/jquery-2.1.4.min.js',
          '../jquery-ui/jquery-ui.min.js',
          '../D3/d3.js',
          'libs/angular.min.js',
          'libs/angular-route.min.js',
          'libs/angular-animate.min.js',
          'libs/selectize.js',
          'libs/angular-selectize.js',
          'libs/angular-mocks.js',

          'simulator.js',

          '*.js',
          'services/**/*.js',
          'qa/tests-*.js'
],

...

私は当初、メイン モジュールの順序が間違っていると考えていました:「simulator」(「simulator.js」ファイル内で定義) は、次のスタック オーバーフロー スレッドが推奨するように、他のモジュールの前に具体的に上に移動しました。

Karma Jasmine のテスト実行で Angular モジュールを使用できない

役に立ちませんでした。次に、Angular アプリのメイン エントリ ファイル (angular-mocks.js と qa/tests-*.js を除く) と同じ順序でファイルがインポートされるようにしました。ワイルドカードですが、成功しません。

ジャスミンは間違いなくテストファイルに入りますが、モジュールの「結果」をインポートしようとしている行に出くわします:

describe('simulator.chartService', function() {

var chartService;
var graphConfig;

console.log("instantiating module result");
  beforeEach(module('result'));
console.log("finished instantiating");

beforeEach(inject(function($injector) {
  graphConfig = $injector.get('graphConfig');
  chartService = $injector.get('chartService');

}));

it('should be created', function() {
  expect(chartService.calcColors(10)).not.toBeNull();
});

});

したがって、2 つの console.log() ステートメントの間でエラーが発生することがわかります。

「karma.config.js」の配列「files」内のファイルの順序にまだ何か問題があると思われます。他のモジュールに依存するメインモジュール「シミュレーター」があります。

angular.module('simulator', ['ngRoute','ngAnimate','selectize','newexp2','newexp','login','edit','exps', 'result','templates','commons'])

モジュール「newexp2」、「newexp」、「login」、「edit」、「exps」、「result」、「templates」はすべてモジュール「commons」に依存しています。

「ファイル」配列内に相互依存モジュールを正しくインポートする方法は? メインモジュールである「simulator.js」を他のすべての上に配置するだけで十分ですか、それとも他のすべてのモジュールを「commons.js」の前に配置する必要がありますか?

もう 1 つの疑惑は、Angular の公式 Web サイト「angular-mocks.js」からダウンロードした angular.js ライブラリ バージョンが、使用している他のモジュールと互換性がない可能性があることです。以前、「angular-animate.js」ファイルでこのような問題がありました。

テストコードを囲んでいる限り$(function(){...})(そして他のすべてのモジュールがそれで囲まれている限り)、モジュールのインポート中にエラーは生成されないため、間にエラーのないresult2つのステートメントが表示され始めconsole.log()ますが、これにより未知のものが生成されますitで囲まないと、$(function(){...})テストitは呼び出されますが、モジュールのresultインポートは失敗します。

これまでのところ、私はほとんど立ち往生しており、どこに移動して何を試すべきかわかりません. どんな提案でも大歓迎です。

4

1 に答える 1

0

わかりました。問題は、すべての角度コードが の中に含まれていたこと$(function(){...})です。解決策は、すべての を削除してから$function(){...})、メイン エントリの .html ファイル内で JavaScript のインポートを並べ替えることです。これにより、すべてのテストが正常に機能し始めます。質問は、次のように重複としてマークする方がよい場合があります。

Angular document.ready() の問題

于 2015-11-03T02:11:34.013 に答える