I am developing iOS app using turbolinks-ios and Rails variant.
In my iOS app, I set custom user agent iPadApp
and detect that on Rails application controller
is using request.user_agent.try(:index, 'iPadApp')
for setting variant
to tablet
(because by views are like foo.html+tablet.haml
).
My app is working fine and now I am trying to write feature tests for my app but can't properly set user agent. I tried this post that actually is stackoverflow but I see that it does not set request.user_agent
instead (page.driver.browser.header(key, value)
) set query parameter with in request.params
.
In my controller test I simply use request.user_agent = 'iPadApp'
to set user agent which is working fine.
How can I configure testing request so that I can use request.user_agent.try(:index, 'iPadApp')
?
Thank you for any kind of help.
Since you're not specifying a driver Capybara should be using rack_test. With the rack_test driver you can set the user agent header, in your test code before calling visit
, with
page.driver.header('User-Agent', 'the user agent string you want')
That should then make request.user_agent accessible in your application code.
A different solution would be register a specific driver for your ipad tests
Capybara.register_driver(:ipad_rack_test) do |app|
Capybara::RackTest::Driver.new(app, :headers => { 'HTTP_USER_AGENT' => 'User agent string' })
end
and then specify your driver as :ipad_rack_test
To add on to this, if you are looking to set the user agent for all of your testing. You can do something like this in your spec_helper.rb config section (chrome user agent as an example)
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With