2013-06-27 30 views
1

當使用水豚,WebKit的或吵鬧鬼來測試JavaScript的行爲,我經常發現(或不幸的是,寫)看起來像這樣請問這水豚測試片?

it "saves the check box value when clicked", js: true do 
    visit '/somewhere' 

    page.should have_unchecked_field 'cool_check_box' 

    page.check 'cool_check_box' 

    visit '/somewhere' 

    page.should have_checked_field 'cool_check_box' 
end 

...這裏勾選複選框使得可以節省任何狀態的一些AJAX請求測試允許在快速重新加載後檢查它。

該測試似乎保證會剝落,因爲如果AJAX請求在第二個visit '/somewhere'發生時沒有完成,它將在複選框處於錯誤狀態時加載。

幸運的是,這個網頁上有還,而該複選框請求完成該旋轉沿着旋轉,這樣我就可以修改,像這樣

it "saves the check box value when clicked", js: true do 
    visit '/somewhere' 

    page.should have_unchecked_field 'cool_check_box' 

    page.check 'cool_check_box' 

    # Wait for checkbox ajax to complete 
    page.should have_css('.spinner:not(.active)') 

    visit '/somewhere' 

    page.should have_checked_field 'cool_check_box' 
end 

測試,我還是有點偏執,雖然:如果page.check但是沒有設法將微調器設置爲activepage.should have_css行之前,那麼該行將在請求開始之前成功。

鑑於由複選框觸發的JavaScript設置了active類,我可以保證此測試永不剝落嗎?

回答

2

您所談論的是處理檢查事件的代碼同時運行與檢查.spinner:not(.active)的代碼的風險。這不是一個風險,因爲頁面上的Javascript是單線程的 - 你可以保證檢查甚至會被首先處理。