16

私は少しこれを検索し、自己解決策を実装しようとしましたが、それまでは自信を持っていませんでした。Ruby on RailsでのJavaScript統合テスト

私が必要とするのは、JavaScriptとやり取りしていくつかの動作をアサートするプログラム的な方法を得るRuby on Railsの統合テストを書くことです。私はTest :: Unitをコントローラ/モデルの部分に使用していますが、私のアプリケーションで使用されるいくつかのjQuery/JavaScriptの動作をテストするのには苦労しています。主に、UIのいくつかの情報セットを更新するajax呼び出しと対話で構成されます。

私は自信を持って、オートテストと赤緑プロセス全体をうまく統合するソリューションは見つけられませんでした。だから、クライアント側コードの大部分はテストされていないので、 Pでなければなりません)。

だから誰にでもこの問題に関するベストプラクティスの提案はありますか?ユニットテストJSは、UIなどの現在の状態に大きく依存し、AFAIKでさえ、まともなテストを実装するための良い方法を見つけられていないため、Crockfordが指摘しているように少し難しいです...

まもなく:Ajaxに依存し、オートテストまたは他のCIツールと統合し、それを行ううまいエレガントな方法が見つからない、いくつかのUI動作のテストを実装する必要があります。 Selenium Web-DriverCapybaraの組み合わせの外のすべての注意のため

おかげで、 敬具

答えて

3

2011年4月にJavaScriptをテストするためにthoughtbotの人updated their questがあります。

バグ: Akephalosは、次のような理由から好意から落ちた先に述べたように、jQueryのライブと特異的にhtmlunit、 にバグがあります。すべてのブラウザの実装がバグを持っている が、テストは 実際のブラウザと同じバグが発生した場合、それはより便利です。

互換性:htmlunitが完全に機能を実装していないが 現代のブラウザが行うことを設定します。たとえば、DOMの範囲や Ajaxファイルのアップロードは完全には処理されません。

レンダリング:htmlunitは実際にページをレンダリングしないため、 がCSSの表示または配置に依存するというテストは機能しません。

パフォーマンス:あなたのテストのほとんどはJavascriptを使用している場合、 とテストスイートがクロールを開始htmlunit。それは Akephalosでテストを起動するために時間がかかり、大きなテストスイートは、簡単に10または15分かかることがあります。

オープンソースである自分のソリューションをロールバックしました。capybara-webkitそれはまだかなり新しいですが、それは今行く方法のように見えます。

4

私の知る限りでは、JSコードの自動テストのための非常にいくつかのオプションがあります。 私はcapybaraとselenium web-driverでキュウリを使用していますが、実際にselenium-webdriverがajaxコールで特定のページをテストするためにfirefoxやchromeを起動するため、一連のテストを実行するのにかなり時間がかかります。

いくつかの選択肢がありますが、すべての時間やあらゆる状況で動作しません。 例:Capybara with envjs

+0

カピバラ-envjsへのリンクをありがとう!それは、Railsの世界の外で(例えば、従来のWebアプリケーション上で)使用できますか? –

2

articleAkephalosを推奨します。

+0

これは、カピバラとGUIのない​​HTMLユニット/ JSインタープリタを組み合わせて、私が探していたものです。ありがとうございます! – victorcampos

2

私はキュウリとカピバラをセレンで使用しました。カピバラがそれを待つことになっていたにもかかわらず、セレンは動的に生成されたjavascriptを見ることができないように思われたので、非常にイライラしました。これは2011年1月に行われました。今は状況が異なる可能性があります。

現在、私はキュウリとカピバラにアケファロを使用しています。これまでのところ、それは非常に困難でした。なぜなら、それはヘッドレスなので、あなたは進歩を見ることができません。カピバラの「save_and_open」コールはある程度助けになりました。 2. jQueryとakephalosはうまく一緒に演奏されていないようです。例えば、jqueryの.change()でラジオボタンをトリガーすると、クロムで正常に動作しますが、akephalosでは動作しません。私は後でどこかでIEで動かないと聞いたので、これは意図的なものかもしれません。ラジオボタンの.change()の代わりに.click()を使用して問題を解決しましたが、.change関数が多数の質問で実行されるように設定されていたため、テスト用にコードを作成する必要がありました。

私にとって一番重要なことは、レールenvでの自動javascriptの受け入れテストはまだ未熟で、おそらくそれが価値がある作業だということです。

関連する問題