1

これを理解するのに時間がかかったので、後世のためにこれを求めています。

私は、require.js を使用するアプリケーションと、ジャスミンに基づいたテストを grunt で自動化しています。

モジュールを論理コンポーネントにグループ化し、それぞれが の下のディレクトリにありappます。私のrequirejs.config()呼び出しは、これらのコンポーネントのパスプレフィックスを次のように設定します。

paths: {
    /*... vendor libraries are listed here ...*/
    ui: 'app/ui',
    data: 'app/data',
    /* etc */
}

次に、これらのモジュールへの依存関係を次のように指定できます。

define([ 'ui/some/module', 'data/another/module' ], function(ui_module, data_module) {
    /* code for module being defined goes here */
});

私のアプリは動作し、私のテストは Web ベースのランナーに合格します。これは、アプリケーションで使用したものと同様の構造に従います。これは、require.js を指すドキュメント本体の単一の要素<script>であり、これには非常によく似た呼び出しが含まれていますが、テスト自体の追加パスと、テストを実行する への呼び出しのみが含まれています。data-maintest/indexrequirejs.config()window.onload()

しかし、を使用するgrunt-contrib-jasmineと、テストがハングし、テストが実行されません。私が受け取るメッセージは次のとおりです。

>> Error: timeout: Load timeout for modules: [list of modules, all my own application modules]
>> http://requirejs.org/docs/errors.html#timeout at
>> http:/127.0.0.1:8000/_SpecRunner.html:21 
>> http:/127.0.0.1:8000/.grunt/grunt-contrib-jasmine/require.js:12 v
>> http:/127.0.0.1:8000/.grunt/grunt-contrib-jasmine/require.js:14 C
>> http:/127.0.0.1:8000/.grunt/grunt-contrib-jasmine/require.js:14 

どうすれば自分のテストをうなり声で通過させることができますか?

4

1 に答える 1

0

私のrequirejs.config()呼び出しのパスプレフィックスには、末尾のスラッシュが含まれている必要があることがわかりました。

paths: {
    /*... vendor libraries are listed here ...*/
    ui: 'app/ui/',
    data: 'app/data/',
    /* etc */
}

したがって、'app/ui/'代わりに'app/ui'.

どちらのバージョンもブラウザーで動作するため、この根本的な原因についてはまだわかりません。grunt タスクで使用されている require.js のバージョンが異なるか、phantom に固有のものである可能性があります。

この質問と回答を残しておくと、誰かの時間を節約できます。

于 2014-10-15T11:11:06.437 に答える