我在我的應用程序中使用數據表,並且記錄由ajax加載到表中。現在我正在爲我的數據表的頁面編寫測試,並且必須等待直到記錄被加載。我配置了capybara webkit,並在我的測試中放入了js:true。但是當我運行測試我得到這個錯誤水豚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'來懶洋洋地創建'貢獻',所以當你得到ajax結果時它實際上不在數據庫中),或者您尚未禁用事務性測試並設置database_cleaner,因此記錄在測試和應用程序線程中都可用。然而,這真的是一個單獨的問題,從這一個 –
感謝您的迴應@ thomas,我測試,記錄是使用pry創建的,我使用let!它在開始時創建記錄。我所有的其他測試都在工作,所以我認爲我的事務性測試database_cleaner是可以的。將更多的細節發佈另一個問題,謝謝。 –