我一直试图找到使用睡眠的替代方案已经有一段时间了,而且似乎每一种避免使用睡眠的建议方法都无法正常工作,我就在绳子的最后。
it 'finds the correct product when searching by job type', js: true do
fill_in('filterrific_for_work_type', with: 'Central')
# once again, sleep feels like the only thing that works
#sleep 1 # TODO: find a better way..
expect(find('#work_queue_items_filter_reset')).to have_content('Reset All Filters')
expect(page).to have_link('IP Central Report',
href: work_queue_item_path(@release.id))
end
我也有等待ajax助手:
module CapybaraHelpers
def wait_for_ajax
Timeout.timeout(Capybara.default_max_wait_time) do
loop until finished_all_ajax_requests?
end
end
def finished_all_ajax_requests?
page.evaluate_script('jQuery.active').zero?
end
end
在spec_helper.rb中:
RSpec.configure do |config|
config.include CapybaraHelpers, type: :feature
end
除非我添加睡眠1,否则此测试会中断。我已尝试使用'''''','have_content'之类的内容进行如此多的迭代。这真让我疯狂。
答案 0 :(得分:3)
只要在页面上进行了明显的更改,就几乎不需要wait_for_ajax。你没有确切地说出你得到了什么错误,但我写出你期望的方式将是
expect(page).to have_css('#work_queue_items_filter_reset', text: 'Reset All Filters')
如果这不起作用,那么可能只是你将Capybara.default_max_wait_time设置得太短而不适合你正在测试的硬件/应用程序。您可以通过在期望中指定自定义等待时间来测试它,看看它是否有所作为
expect(page).to have_css('#work_queue_items_filter_reset', text: 'Reset All Filters', wait: 10) # wait up to 10 seconds for matching element to appear
答案 1 :(得分:0)
你永远不应该使用"睡眠"与水豚。方法如 https://github.com/ordinaryzelig/capybara_minitest_spec
他们在里面睡觉。