2012-02-09 1 views
3

ページ上のJavaScriptエラーが発生した場合どのように私はカピバラ-Webkitのと機能検査のステップに失敗していますか?私は私のRuby on Railsのアプリで異なるシナリオをテストするためキュウリ、カピバラとカピバラ-webkitのを使用してい

私がテストしたシナリオが実行されている間、ページ上の任意のJavaScriptエラーを検出し、失敗する可能性があります方法はありますか?これらのテストを使用して、自動テスト実行の一環として、変更点間の機能(JavaScriptを含む)が破られていないことを確認しています。

私はテスト出力での失敗を見ることができますが、それはテストに失敗しない:

http://127.0.0.1:54928/...|16|ReferenceError: Can't find variable: $ 
http://127.0.0.1:54928/...|16|ReferenceError: Can't find variable: $ 
... 

感謝を!

更新:私が見つけた一つの方法は、以前のエラーが起こらなかった場合にのみ可能なJavaScriptを実行しようとするステップを持つことです。その場合、私はこのようなエラーが出るでしょう:

Javascript failed to execute (Capybara::Driver::Webkit::WebkitInvalidResponseError) 
./features/step_definitions/....rb:19:in `/^I should not see any JavaScript errors$/' 
features/....feature:34:in `Then I should not see any JavaScript errors' 

は、より良い方法はありますか?

答えて

-1

あなたは、各ステップで実行するための最良の方法は、「私のページを表示する」と、あなたのWebコンソールを確認してください。次に、あなたのコードにconsole.logを置くことができます。選択したステップのアクションを作成します。 JavaScriptのエラーが通知されるが、

+0

私たちは、それが失敗した場合にのみ調査することができるように、自動的に手順を失敗する方法を探しています...答えてくれてありがとう、私は、私は理解してないと思います。各ページを開き、コンソールをチェックするために持つことは、ヘッドレスカピバラ-のWebKitを使用する意味がなくなります。 –

0

は時折役に立つことができ、あなたは実際のJavaScriptの動作をテストすることを目指すべきです。 JavaScriptエラーがある場合、これは失敗するシナリオとしてそれ自身を明示する必要があります。

+0

私たちが持っている問題は、キャンバス要素に描かれた何かを見る機能は、JavaScriptテストが失敗した場合にしかチェックできないということです。それは(まだクリックイベントの直接の作成を許可しないとカピバラ-webkitの)テストになるとキャンバスが(私たちはBACKBONE.JSモデルを使用して描画する)ブラックボックスであるためです。おそらく、私が行方不明になっていることをテストするための良い方法がありますか? –

3

はい、あなたはpage.driver.error_messagespage.driver.console_messagesやエラーメッセージだけで、すべてのコンソールメッセージにアクセスすることができます。

Then /^I should see no Java\-Script errors$/ do 
    page.driver.error_messages.length.should == 0 
end 

サイドノート:カピバラ-webkitのも素敵page.should_not have_errorsを書くためのマッチャー:have_errorsが含まれて私は一緒に何かを示唆していないjavascriptのエラーをテストするには

。残念ながら、これは(少なくとも私にとっては、以下を参照してください。https://github.com/thoughtbot/capybara-webkit/pull/201)を、現在のバージョンでは壊れているように見える

0

capybara-webkit常に我々の環境で2つの偽のメッセージを持っているように見えます。私は、できるだけ具体的にし、これらをフィルタリングしようとしましたが、次は自動的にカピバラ-のWebKitでのJavaScriptエラーの検出時に失敗する私たちのために働いている:

webkit?がある
AfterStep do 
    if webkit? 
    real_error_messages = [] 
    page.driver.error_messages.each_with_index do |e, i| 
     # first two messages appear to be bogus, always. 
     if (e[:line_number] == 0) && (e[:source].eql? 'undefined') && (e[:message].eql? 'TypeError: \'null\' is not an object') && i <= 1 
     # discard message 
     else 
     real_error_messages << e 
     end 
    end 

    raise "Javascript errors: #{real_error_messages}" if real_error_messages.length > 0 
    end 
end 

def webkit?() 
    [:webkit, :webkit_debug].include? Capybara.javascript_driver 
end 

Full gist here

+0

これはクリアされたように見えるので、もはやメッセージをフィルタリングする必要はありません。 – kross

関連する問題