私はアプリケーションで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のエラーではなく、ロジックをテストしたいので、それを無視してください。
答えに感謝、それはActionController :: RoutingErrorの私の問題を解決しましたが、私のテストは動作していません。私のテーブルには入力されていない/ capybaraはテストで待機していないので、 "#{contribution.user_name}"は見つかりません。しかし、すてきで正確な答えに感謝します。 –
@MatheusMendesあなたのテストがうまくいかないことは別の問題です。応答が待たずに待っている場合に備えて、 'Capybara.default_max_wait_time'を増やしてみてください。おそらくあなたがテストで返されるレコードを作成していない可能性があります(実行しないか、遅く寄付する 'let'を使用することによって、実際にDBにはないのでajaxの結果を得る)トランザクションテストを無効にしてdatabase_cleanerをセットアップしていないので、レコードは実際にテストスレッドとアプリケーションスレッドの両方で使用できるようになります。しかし、これは本当にこの1つの質問とは別のものです –
レスポンス@thomasのおかげで、私はレコードがpryを使って作成されていることをテストしました。私はletを使っています!レコードは最初に作成されます。私の他のテストはすべて動作しているので、database_cleanerのトランザクションテストは問題ないと思います。より詳細な、感謝の別の質問を投稿します。 –