ruby-on-rails - 在Rails测试上设置自定义用户代理

标签 ruby-on-rails capybara turbolinks rspec3 turbolinks-ios

我正在使用turbolinks-ios和Rails变体开发iOS应用。

在我的iOS应用中,我设置了自定义用户代理iPadApp并检测到Rails上application controller正在使用request.user_agent.try(:index, 'iPadApp')variant设置为tablet(因为 View 类似于foo.html+tablet.haml)。

我的应用程序运行正常,现在我正在尝试为我的应用程序编写功能测试,但无法正确设置用户代理。我尝试了实际上是thisstackoverflow帖子,但我看到它没有设置request.user_agent而是(page.driver.browser.header(key, value))在request.params中设置了查询参数。

在我的 Controller 测试中,我只是使用request.user_agent = 'iPadApp'设置运行良好的用户代理。

如何配置测试请求,以便可以使用request.user_agent.try(:index, 'iPadApp')

谢谢您的任何帮助。

最佳答案

由于您未指定驱动程序,因此Capybara应该使用rack_test。使用rack_test驱动程序,您可以在测试代码中设置用户代理 header ,然后再调用visit,方法如下:

page.driver.header('User-Agent', 'the user agent string you want')

然后应该在您的应用程序代码中使request.user_agent可以访问。

另一种解决方案是为您的ipad测试注册特定的驱动程序
Capybara.register_driver(:ipad_rack_test) do |app|
  Capybara::RackTest::Driver.new(app, :headers => { 'HTTP_USER_AGENT' => 'User agent string' })
end

然后将驱动程序指定为:ipad_rack_test

关于ruby-on-rails - 在Rails测试上设置自定义用户代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39096779/

相关文章:

ruby-on-rails-4 - ActionMailer 未在测试环境中发送确认电子邮件 - Rails 4

ruby - 无法打开到 127.0.0.1 的 TCP 连接 :9516 (connection refused)

ruby-on-rails - Rails 4 + Turbolinks : JS in the head or at the bottom of the body?

javascript - rails 5 turbolinks 5 和谷歌地图如何?

ruby-on-rails - Flash/Flex 发送 XML 到 Rails 应用程序

ruby-on-rails - 创建 ruby 哈希的更好方法?

ruby-on-rails - capybara + Poltergeist + Phantomjs。无法点击按钮

ruby-on-rails - rails 4 : Google Maps not displaying

mysql - 表连接 Ruby on Rails

ruby-on-rails - 尝试启动 Rails 服务器时出现语法错误