6

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

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

我的应用程序运行良好,现在我正在尝试为我的应用程序编写功能测试,但无法正确设置用户代理。我尝试了这篇实际上是stackoverflow的帖子,但我发现它没有设置request.user_agentpage.driver.browser.header(key, value))使用 in 设置查询参数request.params

在我的控制器测试中,我只是request.user_agent = 'iPadApp'用来设置工作正常的用户代理。

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

感谢您提供任何帮助。

4

3 回答 3

9

由于您没有指定驱动程序 Capybara 应该使用 rack_test。使用 rack_test 驱动程序,您可以在调用之前在测试代码中设置用户代理标头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

于 2016-08-23T18:16:40.447 回答
2

除此之外,如果您希望为所有测试设置用户代理。您可以在您的 spec_helper.rb 配置部分执行类似的操作(以 chrome 用户代理为例)

config.before(:each) do
  Capybara.page.driver.header('user-agent', 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36.')
end
于 2017-05-08T19:01:07.097 回答
1

由于我无法评论或编辑,我不得不做出新的回答。虽然上面是正确的,但对于他拥有的顶部page.driver.header('User-Agent', 'the user agent string you want'),我不得不使用Capybara.page.driver.header('User-Agent', 'the user-agent string you want').

希望这可以帮助。

于 2017-03-27T20:02:33.850 回答