每次页面加载后的 Capybara 配置
Capybara config after each page load
我正在寻找一种通用方法来配置 RSpec Capybara 在测试示例中每次加载页面后执行某些操作。
示例:
config.after_page_load do
execute_script('window.analyticsEvents = []; window.analytics = function(name, properties) { analyticsEvents.push([name, properties]) }')
end
然后我可以在我的功能测试中检查那个数组。
我能想到的 "global" 配置的唯一其他选项是在视图中使用 if Rails.env.test?
。
有没有更好的方法?
我想你可以修补 #visit
以在每次访问调用后始终执行你的 JS - 但看起来你可能正在尝试做一些 Capybara 真正不打算做的事情,并且可能不会做有意义。
我在尝试 monitor slow network requests 时遇到了这个问题。虽然最终不需要,但以下操作成功:
module CapybaraHooks
def after_page_change
end
Capybara::Session::DSL_METHODS.each do |method|
define_method method do |*args, &block|
old_page = page.current_url
super(*args, &block)
new_page = page.current_url
puts "Command #{method}"
if old_page != new_page
puts "Changed from #{old_page} to #{new_page}"
after_page_change
else
puts "Still on page: #{new_page}"
end
end
end
end
RSpec.configure do |config|
config.include CapybaraHooks, type: :feature
end
我正在寻找一种通用方法来配置 RSpec Capybara 在测试示例中每次加载页面后执行某些操作。
示例:
config.after_page_load do
execute_script('window.analyticsEvents = []; window.analytics = function(name, properties) { analyticsEvents.push([name, properties]) }')
end
然后我可以在我的功能测试中检查那个数组。
我能想到的 "global" 配置的唯一其他选项是在视图中使用 if Rails.env.test?
。
有没有更好的方法?
我想你可以修补 #visit
以在每次访问调用后始终执行你的 JS - 但看起来你可能正在尝试做一些 Capybara 真正不打算做的事情,并且可能不会做有意义。
我在尝试 monitor slow network requests 时遇到了这个问题。虽然最终不需要,但以下操作成功:
module CapybaraHooks
def after_page_change
end
Capybara::Session::DSL_METHODS.each do |method|
define_method method do |*args, &block|
old_page = page.current_url
super(*args, &block)
new_page = page.current_url
puts "Command #{method}"
if old_page != new_page
puts "Changed from #{old_page} to #{new_page}"
after_page_change
else
puts "Still on page: #{new_page}"
end
end
end
end
RSpec.configure do |config|
config.include CapybaraHooks, type: :feature
end