Ruby on rails 每次页面加载后的Capybara配置

Ruby on rails 每次页面加载后的Capybara配置,ruby-on-rails,rspec,capybara,rspec-rails,poltergeist,Ruby On Rails,Rspec,Capybara,Rspec Rails,Poltergeist,我正在寻找一种通用的方法来配置rspeccapybara,以便在测试示例中的每个页面加载后执行某些操作 例如: config.after_page_load do execute_script('window.analyticsEvents = []; window.analytics = function(name, properties) { analyticsEvents.push([name, properties]) }') end 然后我可以在功能测试中检查该数组 对于“全局”

我正在寻找一种通用的方法来配置rspeccapybara,以便在测试示例中的每个页面加载后执行某些操作

例如:

config.after_page_load do
  execute_script('window.analyticsEvents = []; window.analytics = function(name, properties) { analyticsEvents.push([name, properties]) }')
end
然后我可以在功能测试中检查该数组

对于“全局”配置,我能想到的唯一其他选项是在视图中使用
if Rails.env.test?


有更好的方法吗?

我想你可以修补
#visit
在每次访问调用后始终执行JS-但似乎你在尝试做一些水豚真的不适合做的事情,而且可能没有意义。

我在尝试时遇到了这个问题。虽然最终不需要它,但以下方法成功地起到了作用:

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

在视图中有条件地运行JS是我唯一能想到的。*发抖,啊,是的。这就是我最后做的。我想我错过了一个更切碎的方式。谢谢你,汤姆。我不总是打电话拜访。大多数时候,它只是通过点击屏幕上的按钮重定向page@PetrGazarov那么,从水豚身上就没有办法做到这一点——它不知道以这种方式触发的页面更改,除非您专门检查页面上的可见更改。