Rails 4.2 / rspec 3.5 / Capybara webkit - 避免"泄漏"为某些测试设置自定义http用户代理时

时间:2018-04-04 15:53:48

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

我的测试中有90%符合"标准"水豚-webkit的。

但是在一些测试中我需要设置自定义用户代理(因为我们的javascript文件为某些浏览器创建自定义UI,例如android samsung浏览器或iphone firefox ......)

rspec_helper.rb

RSpec.configure do |config|
  config.before(:each, mobile_device_android_samsung_browser: true) do
    page.driver.header 'HTTP_USER_AGENT', 'User agent string for samsung browser'
  end
  config.before(:each, mobile_device_ios_firefox: true) do
    page.driver.header 'HTTP_USER_AGENT', 'User agent string for ios firefox'
  end

  # and so on... for about 20 cusotm device/user-agents

end

然后在我的测试中我会写

describe "test to test UI customisation", mobile_device_android_samsung_browser: true
  # test things
end

使用这种元数据时,我是否应该确保它没有"泄漏"进入其他必须继续使用基本/默认webkit用户代理的测试?

在这种情况下,我编写了下面的代码,但我真的不知道"基本" /默认用户代理我应该让测试重新开始?

  config.after(:each, mobile_device_android_samsung_browser: true) do
     page.driver.header 'HTTP_USER_AGENT', 'DEFAULT USER AGENT TO GO BACK TO'
  end
  config.after(:each, mobile_device_ios_firefox: true) do
     page.driver.header 'HTTP_USER_AGENT', 'DEFAULT USER AGENT TO GO BACK TO'
  end
   # do this for the otehr 20 custom user-agents

我应该使用上面的代码吗?是否有一个自定义方法可以用来描述"标准" /默认用户代理,例如default_user_agent?

1 个答案:

答案 0 :(得分:1)

capybara-webkit中,您可以将用户代理重置为默认值,只需将其设置为空字符串

page.driver.header('user-agent', '')

虽然每次重置驱动程序时它都会重置,但只要你没有在每次测试之间禁用Capybaras重置,它就应该恢复为每次新测试的默认值。

另请注意,您不应该包含领先的' http _'如果您希望正确设置用户代理。见https://github.com/thoughtbot/capybara-webkit/blob/master/spec/driver_spec.rb#L2018