我遇到运行包含ajax的集成测试的问题。
例如下面的测试
scenario 'displays next page when scrolling to the bottom of the page', js: true do
scroll_to_bottom_of_page
wait_for_ajax
expect(all('.follow-up').count).to eq(30)
end
页面方法的scroll_to_bottom的实现
def scroll_to_bottom_of_page
page.execute_script "$('.off-canvas-wrap').scrollTo('.exit-off-canvas');"
end
wait_for_ajax方法的实现
module WaitForAjax
def wait_for_ajax
Timeout.timeout(Capybara.default_wait_time) do
loop until finished_all_ajax_requests?
end
end
def finished_all_ajax_requests?
page.evaluate_script('jQuery.active').zero?
end
end
RSpec.configure do |config|
config.include WaitForAjax, type: :feature
end
我基本上想测试我的无限滚动功能是否有效。
当我将脚本更改为以下内容时,它可以正常工作。
scenario 'displays next page when scrolling to the bottom of the page', js: true do
scroll_to_bottom_of_page
sleep 1
expect(all('.follow-up').count).to eq(30)
end
这不是非常可靠。如果ajax调用超过1秒,该怎么办?我不是一个随意添加1或2或3个睡眠的忠实粉丝。
请帮助找出wait_for_ajax的错误。
感谢。
我刚刚创建了一个测试应用程序。请检查出来
答案 0 :(得分:0)
在capybara论坛上发帖后,我发现有些选择器已经等待异步通话完成,而有些人则没有。要让这个规范通过,我所要做的就是将期望更新到下面的
expect(page).to have_css('.follow-up', count: 30)
如果您遇到过这个并希望了解更多内容,请列出我传递的一些有用资源。