我正在编写功能/集成规范以在页面上提交表单后验证内容。提交表单后,我们的代码会重定向 (302) 到一个页面,该页面基本上显示“已保存帐户”。
我遇到了竞争条件,以验证提交表单后看到的页面内容。我们目前仍在使用 Capybara 1.1.2(我们的经理希望继续使用它)。这就是我所拥有的,但有时会通过,有时会失败。
fill_in 'Some Field', with: 'Some Value'
click_button 'Save'
WAIT_CONDITION
page.should have_content('Account saved')
对于包含 WAIT_CONDITION 的行,我尝试了以下方法,但它们要么不一致地通过,要么有时会产生错误:
# this fails because 'page' sometimes evaluates to page w/ form, not confirmation page
wait_until(5) { page.has_content? 'Account Saved' }
# sometimes generates "NoMethodError: undefined method `-' for "Conflict":String"
wait_until(5) { current_url =~ /#{confirmation_url}$/ }
# sometimes generates "undefined method `map' for nil:NilClass"
wait_until(5) { current_url != /#{form_url}$/ }
# this works, but it's a hack
sleep(5)