2013-07-24 3 views
7

JavaScriptを指定したページにロードして実行する際にエラーがないことを確認するリクエスト仕様を書いてみたいと思います。Capybara:JavaScriptがエラーなしで実行されることをテストしてください。

JavaScriptファイルの最後にDOMに何かを追加してこのコンテンツの存在を宣言することができますが、これはハックのように感じられ、テストの理由からコードを汚染するようになります。私は何かの行に沿ってやりたい潜在的に非常に汚染はありません

visit some_path 
page.should succesfully_run_javascript 
+0

良い質問です。私も答えを待っています。 – Kvass

+0

あなたが見なければならないのは、qUnitのようなJavaScriptのテストフレームワークだと思います。そこにテストを定義し、capybaraを使ってテストを自動化することができます。ジャスミンは別の方法です。 – phoet

+0

テストできるJavaScriptの特定の部分はありますか?たとえば、DOM要素を生成する場合、その要素が存在するかどうかをテストできます。 – Rebitzele

答えて

3

一つの方法は、ヘッドに、このようなものを追加することにより、すべてのエラーを収集することです(これはあなたが既に持っているかもしれないのonerrorハンドラをオーバーライドするに注意してください):

<script> 
    window.errors = []; 
    window.onerror = function(error, url, line) { 
     window.errors.push(error); 
    }; 
</script> 

ます

page_errors = page.evaluate_script('window.errors') 

のようになり、配列が空であるとアサートできます。それ以外の場合は、エラーを出力することができます。

注:最初に実行されたスクリプトである必要があるため、スクリプトレットを先頭に(潜在的には最初のスクリプトレット/スクリプトタグとして)追加することが重要です。

4

テストでは、次のコードを使用してこれを実現できます。

page.driver.console_messages.each { |error| puts error } 
expect(page.driver.console_messages.length).to eq(0) 

最初の行は何が起こっているのかを見るのに便利なエラーを出力します。 2行目でテストが失敗します。

関連する問題