私は頻繁にcapybaraで問題に遭遇し、capybaraは次に進む前にajaxイベントが完了するのを待っていないため、リクエストテストが失敗します。
Googleは、これを修正するためにテストに:resynchronizeオプションを使用する必要があることを示しているようです。しかし、それは機能していません。
これが問題であることを証明するために、失敗したテストは、ajax呼び出しの後にsleepステートメントを置くことで修正できます。適切な遅延はテストを実行するマシンの速度に応じて変化するため、これは悪い習慣をハックするようです。また、適切に大きな値を選択すると、多くのajaxアクションを含むテストスイートの実行が大幅に遅くなります。
不合格/合格テストの例を以下に示します。保存をクリックする前にスリープすると、ページでの合格と不合格の違いが生じます。shouldhave_content('custom item'):
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
これはカピバラのバグですか、それとも私は何か間違ったことをしていますか?
助けてくれてありがとう...