在 rails 测试中设置自定义用户代理
Set custom user agent on rails testing
我正在使用 turbolinks-ios 和 Rails 变体开发 iOS 应用程序。
在我的 iOS 应用程序中,我设置了自定义用户代理 iPadApp
并检测到 Rails application controller
正在使用 request.user_agent.try(:index, 'iPadApp')
设置 variant
到 tablet
(因为按视图就像 foo.html+tablet.haml
)。
我的应用程序运行良好,现在我正在尝试为我的应用程序编写功能测试,但无法正确设置用户代理。我试过 this post that actually is Whosebug 但我发现它没有设置 request.user_agent
而是 (page.driver.browser.header(key, value)
) 在 request.params
中设置查询参数。
在我的控制器测试中,我只是使用 request.user_agent = 'iPadApp'
来设置工作正常的用户代理。
如何配置测试请求以便我可以使用 request.user_agent.try(:index, 'iPadApp')
?
感谢您提供的任何帮助。
由于您没有指定 driver 水豚应该使用 rack_test。使用 rack_test driver 您可以在调用 visit
之前在您的测试代码中设置用户代理 header,使用
page.driver.header('User-Agent', 'the user agent string you want')
这将使 request.user_agent 在您的应用程序代码中可访问。
另一种解决方案是为您的 ipad 测试注册一个特定的 driver
Capybara.register_driver(:ipad_rack_test) do |app|
Capybara::RackTest::Driver.new(app, :headers => { 'HTTP_USER_AGENT' => 'User agent string' })
end
然后将您的 driver 指定为:ipad_rack_test
由于我无法评论或编辑,我被迫做出新的回答。虽然上面是正确的,但是对于他有page.driver.header('User-Agent', 'the user agent string you want')
的顶部,我不得不使用Capybara.page.driver.header('User-Agent', 'the user-agent string you want')
。
希望对您有所帮助。
此外,如果您希望为所有测试设置用户代理。您可以在 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
我正在使用 turbolinks-ios 和 Rails 变体开发 iOS 应用程序。
在我的 iOS 应用程序中,我设置了自定义用户代理 iPadApp
并检测到 Rails application controller
正在使用 request.user_agent.try(:index, 'iPadApp')
设置 variant
到 tablet
(因为按视图就像 foo.html+tablet.haml
)。
我的应用程序运行良好,现在我正在尝试为我的应用程序编写功能测试,但无法正确设置用户代理。我试过 this post that actually is Whosebug 但我发现它没有设置 request.user_agent
而是 (page.driver.browser.header(key, value)
) 在 request.params
中设置查询参数。
在我的控制器测试中,我只是使用 request.user_agent = 'iPadApp'
来设置工作正常的用户代理。
如何配置测试请求以便我可以使用 request.user_agent.try(:index, 'iPadApp')
?
感谢您提供的任何帮助。
由于您没有指定 driver 水豚应该使用 rack_test。使用 rack_test driver 您可以在调用 visit
之前在您的测试代码中设置用户代理 header,使用
page.driver.header('User-Agent', 'the user agent string you want')
这将使 request.user_agent 在您的应用程序代码中可访问。
另一种解决方案是为您的 ipad 测试注册一个特定的 driver
Capybara.register_driver(:ipad_rack_test) do |app|
Capybara::RackTest::Driver.new(app, :headers => { 'HTTP_USER_AGENT' => 'User agent string' })
end
然后将您的 driver 指定为:ipad_rack_test
由于我无法评论或编辑,我被迫做出新的回答。虽然上面是正确的,但是对于他有page.driver.header('User-Agent', 'the user agent string you want')
的顶部,我不得不使用Capybara.page.driver.header('User-Agent', 'the user-agent string you want')
。
希望对您有所帮助。
此外,如果您希望为所有测试设置用户代理。您可以在 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