最近RequireJSを導入したばかりのプロジェクトがあります。RequireJSの前は、Jasmineでプロジェクトをテストしていました。現在、JasmineのSpecRunnerを更新して、RequireJSを処理できるようにしようとしています。
この記事は、私が始めたときに使用したRequireJSとJasmineを使用した単体テストに関する記事でした。モジュールのロード方法に問題が発生しました。各モジュールは、依存関係がある他のモジュールを定義しますが、各モジュールのロードパスは、requireJSがロードされた場所を基準にしています。
requireJSをbackground.htmlとSpecRunner.htmlの2つの異なる場所にロードします。背景はメインアプリケーション用で、SpecRunnerはテスト用です。問題は、相対パスが変更されるため、SpecRunnerから呼び出されたときにモジュールをロードできないことです。
例:
- js / third_party / jquery-1.7.2.min.js
- js / background / player.js
- js / background / playlists.js
- tests / SpecRunner.html
- tests / spec / PlayerSpec.js
- background.html
このフォルダ階層とファイルを使用して、2つのシナリオがあります。コードが正しく実行されるものと問題があるもの:
良いシナリオ
- background.htmlはrequire.jsをロードし、ロードポイントとしてplayer.jsをターゲットにして実行します。
- player.jsは、playlists.jsを依存関係として定義しています。
- playlists.jsが読み込まれます。
- player.jsが読み込まれます。
悪いシナリオ
- SpecRunner.htmlはrequire.jsをロードし、ロードポイントとしてplayer.jsをターゲットにして実行します。
- player.jsは、playlists.jsを依存関係として定義しています。
- playlists.jsの読み込みに失敗します。GET file://tests/playlists.js
- ファイルの場所が正しくありません。playlists.jsは/testsの下ではなく、js/backgroundの下にあります。
これをどのように処理すればよいかわかりませんか?パス名を非常に明示的にすることが私の唯一の方法のようですが、それはすべてのrequireJSの例に反します。