0

我正在编写功能/集成规范以在页面上提交表单后验证内容。提交表单后,我们的代码会重定向 (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)
4

1 回答 1

1

您可以假设 wait_until 块中的任何异常都是由竞争条件引起的并忽略它们(即拯救它们)。它仍然有点 hack,但它比使用 sleep 更好。

尝试添加一个返回 false 的救援:

wait_until(5) { current_url =~ /#{confirmation_url}$/ rescue false }
于 2013-08-02T19:14:37.253 回答