我經常遇到水豚問題與請求測試失敗,因爲水豚沒有等待ajax事件完成前繼續前進。水豚ajax競爭條件
谷歌似乎表明我應該使用:resynchronize選項爲我的測試來解決這個問題。但它不起作用。
爲了證明這是一個問題,可以通過在ajax調用之後放置sleep語句來修復失敗的測試。這看起來很糟糕,因爲適當的延遲會根據運行測試的機器的速度而變化。選擇一個合適的大值會嚴重減慢運行一個包含大量Ajax操作的測試套件。
一個失敗/通過測試的例子如下。點擊保存之前的睡眠,使路過的區別/上page.should have_content失敗(「自定義項目」):
it "should be able create a new todo item", :js, :resynchronize, :focus do
# Visit new action
visit new_todo_list
# Fill in the name
fill_in "#name", "test list"
# Click on add item to launch inline popup
find('a.add-item').click
within '#new_item' do
fill_in 'todo_item_description', :with => 'custom item'
# Run ajax action to add currrent item
find('.btn').click
end
sleep(1)
# Save
find('a.save').click
page.should have_content('test list')
page.should have_content('custom item')
end
這是水豚的錯誤還是我做錯了什麼?
感謝您的幫助......
謝謝,這是不是任意的睡眠好多了! – Chris 2012-08-02 13:13:36