每页加载后的Capybara配置

时间:2016-06-10 17:06:16

标签: ruby-on-rails rspec capybara rspec-rails poltergeist

我正在寻找一种通用方法来配置RSpec Capybara在测试示例中每次加载页面后执行某些操作。

示例:

config.after_page_load do
  execute_script('window.analyticsEvents = []; window.analytics = function(name, properties) { analyticsEvents.push([name, properties]) }')
end

然后我可以在功能测试中检查该数组。

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

有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

我在尝试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