为什么带有 AJAX 的 rspec 示例无法正常工作?
Why is rspec example with AJAX not working correctly?
我在使用包含 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 的问题,我们将不胜感激。
谢谢。
我刚刚创建了一个测试应用程序。请查看
在水豚论坛上发帖后,我发现有些选择器等待异步调用完成,有些则没有。为了让这个规范通过,我所要做的就是将期望值更新为以下
expect(page).to have_css('.follow-up', count: 30)
下面列出了我传递的一些有用资源,如果您曾经 运行 了解此内容并想了解更多。
我在使用包含 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 的问题,我们将不胜感激。
谢谢。
我刚刚创建了一个测试应用程序。请查看
在水豚论坛上发帖后,我发现有些选择器等待异步调用完成,有些则没有。为了让这个规范通过,我所要做的就是将期望值更新为以下
expect(page).to have_css('.follow-up', count: 30)
下面列出了我传递的一些有用资源,如果您曾经 运行 了解此内容并想了解更多。