2017-07-19 33 views
1

私はアプリケーションでdatatablesを使用しています。レコードはajaxによってテーブルにロードされます。今私は自分のデータテーブルのページのテストを書いており、レコードがロードされるまで待たなければなりません。私はcapybara webkitを設定し、テストにjs:trueを入れました。私は、テストを実行するときには、私は、コンソールをチェックし、私のブラウザでは、このエラーにCapybara webkitがActionController :: RoutingErrorを無視します

Failure/Error: raise ActionController::RoutingError, "No route matches [#{env['REQUEST_METHOD']}] #{env['PATH_INFO'].inspect}" 

ActionController::RoutingError: 
     No route matches [GET] "/images/sort_both.png" 

を取得し、私はこのエラーを取得しない、すべての画像が発見されています。

は、これは私のWebKitの設定

Capybara.javascript_driver = :webkit 

Capybara::Webkit.configure do |config| 
    config.raise_javascript_errors = false 
end 

私はwait_for_ajax使っている方法

def wait_for_ajax 
    Timeout.timeout(Capybara.default_max_wait_time) do 
    loop do 
     active = page.evaluate_script('jQuery.active') 
     break if active == 0 
    end 
    end 
end 

であり、これは私のテスト

scenario 'check pending contributions', js: true do 
    login_as analyst, scope: :analyst 

    visit '/analyst/contributions' 

    wait_for_ajax 
    expect(page).to have_content "#{contribution.user_name}" 
    end 

ですそして今、私はこのルーティングを修正したいです私はちょうどjsのエラーではなく、ロジックをテストしたいので、それを無視してください。

答えて

0

このエラーはJSエラーではなく、アセットが要求されたときにサーバーによって発生したエラーです。 Capybara.raise_server_errors = falseを設定することでエラーを無視するようにテストに指示することもできますが、より良い解決策は、すべてのアセットがテスト環境で正しく提供されるようにアセットパイプラインを修正することです。テスト環境で以前にアセットをプリコンパイルしておき、残ったマニフェストファイルが新しく追加されたアセットを再コンパイルできないということは間違いありません。あなたは#{contribution.user_name}テキストがhave_contentが既に再試行/お待ちしておりますので、wait_for_ajaxメソッド呼び出しの必要がないAJAX呼び出しを介してロードされていると仮定すると、さらに

RAILS_ENV=test rake assets:clobber 

のようなものを実行していることを修正することができます。

+0

答えに感謝、それはActionController :: RoutingErrorの私の問題を解決しましたが、私のテストは動作していません。私のテーブルには入力されていない/ capybaraはテストで待機していないので、 "#{contribution.user_name}"は見つかりません。しかし、すてきで正確な答えに感謝します。 –

+0

@MatheusMendesあなたのテストがうまくいかないことは別の問題です。応答が待たずに待っている場合に備えて、 'Capybara.default_max_wait_time'を増やしてみてください。おそらくあなたがテストで返されるレコードを作成していない可能性があります(実行しないか、遅く寄付する 'let'を使用することによって、実際にDBにはないのでajaxの結果を得る)トランザクションテストを無効にしてdatabase_cleanerをセットアップしていないので、レコードは実際にテストスレッドとアプリケーションスレッドの両方で使用できるようになります。しかし、これは本当にこの1つの質問とは別のものです –

+0

レスポンス@thomasのおかげで、私はレコードがpryを使って作成されていることをテストしました。私はletを使っています!レコードは最初に作成されます。私の他のテストはすべて動作しているので、database_cleanerのトランザクションテストは問題ないと思います。より詳細な、感謝の別の質問を投稿します。 –

関連する問題