Ruby on rails 水豚ajax竞争条件
我经常在capybara中遇到请求测试失败的问题,因为capybara在继续之前没有等待ajax事件完成 谷歌似乎表示我应该在测试中使用:ressynchronize选项来解决这个问题。但它不起作用 为了证明这是一个问题,失败的测试可以通过在ajax调用之后放置sleep语句来修复。这似乎是一种不好的做法,因为适当的延迟将根据运行测试的机器的速度而变化。选择一个适当大的值将严重降低运行包含大量ajax操作的测试套件的速度 下面是失败/通过测试的示例。单击“保存”前的睡眠决定了页面上的通过/失败。应具有内容“自定义项”:Ruby on rails 水豚ajax竞争条件,ruby-on-rails,ruby-on-rails-3,rspec,tdd,capybara,Ruby On Rails,Ruby On Rails 3,Rspec,Tdd,Capybara,我经常在capybara中遇到请求测试失败的问题,因为capybara在继续之前没有等待ajax事件完成 谷歌似乎表示我应该在测试中使用:ressynchronize选项来解决这个问题。但它不起作用 为了证明这是一个问题,失败的测试可以通过在ajax调用之后放置sleep语句来修复。这似乎是一种不好的做法,因为适当的延迟将根据运行测试的机器的速度而变化。选择一个适当大的值将严重降低运行包含大量ajax操作的测试套件的速度 下面是失败/通过测试的示例。单击“保存”前的睡眠决定了页面上的通过/失败。
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
这是水豚里的虫子还是我做错了什么
感谢您的帮助……我不久前遇到过这个问题,并使用这种方法来确定ajax请求何时完成:
wait_until do
page.evaluate_script('$.active') == 0
end
仍然很黑,但比使用睡眠稍微好一点。我是从你那儿得到的。我将它用于Cucumber特性,但它也应该适用于rspec请求规范
更新6/19/2013
在版本2.0中从Capybara中删除之前,请参阅:了解原因的详细信息
我遵循其中一条建议并实施了它,仅针对我认为合理的一个案例:
def wait_until
require "timeout"
Timeout.timeout(Capybara.default_wait_time) do
sleep(0.1) until value = yield
value
end
end
不久前,我遇到了这个问题,并使用这种方法来确定ajax请求何时完成:
wait_until do
page.evaluate_script('$.active') == 0
end
仍然很黑,但比使用睡眠稍微好一点。我是从你那儿得到的。我将它用于Cucumber特性,但它也应该适用于rspec请求规范
更新6/19/2013
在版本2.0中从Capybara中删除之前,请参阅:了解原因的详细信息
我遵循其中一条建议并实施了它,仅针对我认为合理的一个案例:
def wait_until
require "timeout"
Timeout.timeout(Capybara.default_wait_time) do
sleep(0.1) until value = yield
value
end
end
谢谢,这比随意睡觉好多了!谢谢,这比随意睡觉好多了!