如何在不使用rspec的情况下触发capybara的自动AJAX等待?

时间:2011-11-23 20:06:33

标签: ruby-on-rails-3 capybara

Asynchronous Javascript 下,capybara README提供了以下等待Ajax的示例:

page.should have_text('baz')

这是一个RSpec构造,但我正在使用Test :: Unit + shoulda。 Test :: Unit / shoulda中的等价物是什么?这是我的代码:

assert_equal 'foo', find('.bar').text

之前的行触发Ajax事件。如果在ajax完成后执行,我的断言将成功,但如果之前失败则失败。在成功或超过Capybara.default_wait_time之前,如何让它继续重试?

3 个答案:

答案 0 :(得分:3)

水豚邮件列表比Stack Overflow工作得更好,尽管由于土耳其日,主持人超过24小时批准我的帖子。这是Jonas Nicklas' response

assert page.has_text?('test')

请注意,否定形式为:

assert page.has_no_text?('test')

和NOT:

assert !page.has_text?('test')

这是错误的,不要这样做。 RSpec现在没有这个问题 已经安全了,所以:

page.should_not have_text('test')

/ Jonas

答案 1 :(得分:3)

点击某处或访问新路径后,我使用水豚和Selenium wait_until

somebutton.click
wait_until { something to be true }

somebutton.click
wait_until(n) { something to be true }

其中“n”是等待的秒数

答案 2 :(得分:0)

我也想到了其他有用的东西。我更喜欢乔纳斯的回答,但这也有效:

 assert find('.bar:contains("foo")')

断言不是必需的,因为find会抛出异常 失败,它只是证明这是一个测试。