3

CDN から jQuery をロードする Rails アプリに含まれる Rails プラグインで Jasmine を使用しています。ただし、プラグインで Jasmine テストを実行すると問題が発生します。app/assets/javascripts のソース JavaScript ファイルの前に jQuery をロードする必要がありますが、jasmine.yml に jQuery を含めると、ソース ファイルの前にロードされません。

jasmine.yml の内容:

src_dir: "app/assets/javascripts"
src_files:
 - "my_rails_plugin_source_includer.js"
spec_dir: spec/javascripts
asset_paths:
- "vendor/assets/javascripts"

my_rails_plugin_source_includer.js には、ソース JavaScript が必要です。

//= require my_jquery_dependent_script.js
//= require my_other_jquery_dependent_script.js

私は使用しています

bundle exec jasmine-headless-webkit --color --keep ./spec/javascripts/specs.js

私のテストを実行します。次のようなエラーメッセージが表示されます

ReferenceError: Can't find variable: jQuery
ReferenceError: Can't find variable: jQuery
Test ordering seed: --seed 1629

my_rails_plugin_source_includer.js で jQuery JavaScript ファイル (jquery-1.9.1-min.js など) を明示的に要求すると、テストに合格します。ただし、このプラグインではなく、実際の Rails アプリが必要なので、そうしたくありません。ソース ファイルの前に jQuery を要求する方法について何か提案はありますか? Jasmine は常に最初にソース ファイルをロードするように見えるため、仕様またはヘルパーでそれを要求しても機能しません (もちろん、これは理にかなっています)。

4

2 に答える 2

3

次のことを行うことで、この問題を解決できました。

  1. 公式の jQuery ソースから jquery-1.9.1.min.js をダウンロードし、spec/javascripts/support/helpers フォルダーに保存します。
  2. 次の内容を持つ source.js ファイルを spec/javascripts/support/fixtures フォルダー (任意のフォルダーにすることができます) に作成します。

    //= require ../helpers/jquery-1.9.1.min
    //= require ../../../../app/assets/javascripts/application
    

    app/assets/javascripts/application.js は、プラグインの JavaScript のマニフェストです。

  3. 次のソースを使用するように jasmine.yml ファイルを編集します。

    src_dir: "spec/javascripts/support/fixtures"
    src_files:
     - "source.js"
    

その結果、jQuery 依存のソース JavaScript には、Jasmine のテスト用にのみjQuery がプリロードされています。

于 2013-04-01T18:53:19.893 に答える
0

Fares さん、ご回答ありがとうございます。jasmine の設定ファイルで何が起きているかについての洞察が得られました。

jasmineページの<head>タグにファイルを含める方法には、予測可能な順序があります。

まず、私のセットアップの詳細:

rails 4.0.1
jasmine 1.3.2
jquery-rails 3.0.4 (which provides jquery-1.10.2)


ここに私のspec/javascripts/support/jasmine.yml. 特定のアプリをテストするためのファイルは必要ありませhelperscss。すべてのコメントを削除しました。

src_files:
  - spec/javascripts/lib/jquery-1.10.2.js
  - app/assets/javascripts/tools/dependency-parser.js

spec_dir: spec/javascripts
spec_files:
  - '**/*[sS]pec.js'


私の<head>ジャスミンページには、次のものが順番に含まれています。

jasmine core  <link rel="shortcut icon" type="image/png" href="/__JASMINE_ROOT__/images/jasmine_favicon.png">
              <link rel="stylesheet" href="/__jasmine__/jasmine.css" type="text/css" media="screen">
              <script src="/__jasmine__/jasmine.js" type="text/javascript"></script>
              <script src="/__jasmine__/jasmine-html.js" type="text/javascript"></script>
              <script src="/__jasmine__/json2.js" type="text/javascript"></script>

   src_files  <script src="/spec/javascripts/lib/jquery-1.10.2.js" type="text/javascript"></script>
              <script src="/app/assets/javascripts/tools/dependency-parser.js" type="text/javascript"></script>

helper_files  <!-- I didn't have anything here -->

  spec_files  <script src="/__spec__/dependency-parser_spec.js" type="text/javascript"></script>

jasmine boot  <script src="/__boot__/boot.js" type="text/javascript"></script>


私のアプリでは、アセット パイプラインとjquery-railsgem を使用し、典型的なインクルードは次のapp/assets/application.jsとおりです。

//=require jquery
//=require jquery-ujs
//=require tree .

私はjquery-rails宝石を使用しているため、jQuery JavaScript ファイルを直接ロードする場所が実際にはどこにもないことを意味します。どこからでも来る場合は、アセット パイプラインから来る必要があります。またapp/assets/javascripts/application.js、何らかの理由でファイルを含めることができなかったようです。これは問題ないことが判明しました。jQuery に依存するカスタム JavaScript をテストしたいだけです。

そのため、アプリで使用しているバージョンの jQuery をダウンロードして、次の(1.10.2)ように配置しました。

spec/javascripts/lib/   <= I created this folder

その後、.js必要な順序でファイルを予想通りにロードできたため、すべてが完全に機能しました。完璧ではありません。私は現在、手動で jQuery のバージョンを、jquery-rails使用しているバージョンと同じ仕様に維持していますが、それは今のところかなりマイナーなことです... 「なぜ人々は javascript ファイルを gem にパッケージ化するのですか? " この種の風変わりなことを行う Web フレームワークは他にありません。

このようなアセット パイプラインの問題を処理するはずだったので、gem (この記事の執筆時点での最新バージョン) も使用してみましjasmine 2.0.0.rc5たが、うまくいきませんでした。

jasmine-jqueryまた、またはjasminericegemを使用するなど、より複雑なものにジャンプしようとしましたが、どちらの実装も上で行ったことのより複雑なバージョンであることがわかりました。特定のケースで構成ファイルがタグの内容を生成する方法を理解すると<head>、比較的簡単に修正できました。

必要に応じてリリース時に移行する可能性がjasmine 2.0.0あります (Rails 4 のサポートが向上していると思われます) が、このソリューションがうまく機能すると確信しています。

于 2013-12-15T00:51:28.640 に答える