我正在使用Capybara和Poltergeist來測試使用setTimeout定期刷新頁面內容的索引頁。頁面內容在三種狀態之間轉換,基於外部服務,並且每種狀態都有一個盒式磁帶。使用多個VCR磁帶盒測試JavaScript刷新
我試圖測試使用這樣的代碼刷新:
VCR.use_cassette 'object_new' do
visit index_path
page.should have_content 'New'
end
VCR.use_cassette 'object_running' do
page.should have_content 'Running'
end
VCR.use_cassette 'object_complete' do
page.should have_content 'Complete'
end
第一have_content
成功,但第二次卻沒有。水豚應該等待任何異步調用返回並更新DOM,以便這些斷言通過。我試過using_wait_time
強制斷言在ajax調用返回後等待長,但它沒有幫助。有什麼想法可能會從我的規範中失去使這項工作?該功能在瀏覽器中有效;這只是沒有通過的測試。
對Rails應用程序調用外部服務,並且JS正在訪問RESTful API。我想測試整個堆棧,這就是爲什麼我更願意使用Rails應用程序的API並在後端使用VCR模擬服務。這就是問題所在。當JS根據規範調用API時,它應該已經改變了磁帶盒(因爲JS正在調用我的Rails應用程序正在運行的測試版本),但是我仍然得到響應,就好像第一個磁帶已加載。 – jmacdonald
你如何協調來自JS代碼的AJAX調用與更換磁帶? AJAX調用很可能在您更換磁帶之後或之前發生,因爲它們是在單獨的過程中發生的。可能值得添加一些時間戳記錄到您的磁帶更改和控制器,以查看何時提出請求。 – lmars
看着AJAX響應,他們報告了500錯誤,這就是測試失敗的原因。查看測試日誌不會顯示任何其他細節。 AJAX位每5秒鐘重試一次,所以即使它在第一次嘗試中沒有得到正確的響應,它最終也會如此。我認爲盒式磁帶切換不會導致錯誤,因爲當沒有盒式磁帶請求時,錄像機通常會發出很大聲音。第一頁。該斷言確實通過了,因爲它是值得的。 – jmacdonald