Установить пользовательский агент на тестирование рельсов

Я занимаюсь разработкой приложения для iOS, используя вариант turbolinks-ios и Rails.

В моем приложении для iOS я установил пользовательский агент iPadApp и обнаружить это на Rails application controller использует request.user_agent.try(:index, 'iPadApp') для настройки variant в tablet (потому что по мнению, как foo.html+tablet.haml).

Мое приложение работает нормально, и сейчас я пытаюсь написать функциональные тесты для своего приложения, но не могу правильно настроить пользовательский агент. Я пробовал этот пост, который на самом деле является stackru, но я вижу, что он не устанавливает request.user_agent вместо (page.driver.browser.header(key, value)) установить параметр запроса с помощью request.params,

В моем тесте контроллера я просто использую request.user_agent = 'iPadApp' установить пользовательский агент, который работает нормально.

Как я могу настроить запрос на тестирование, чтобы я мог использовать request.user_agent.try(:index, 'iPadApp')?

Спасибо за любую помощь.

3 ответа

Решение

Поскольку вы не указываете драйвер, 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

Чтобы добавить к этому, если вы хотите установить пользовательский агент для всех ваших испытаний. Вы можете сделать что-то подобное в своем разделе конфигурации 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

Since I cannot comment or edit, I was forced to make a new answer. Although the above is correct, for the top where he has page.driver.header('User-Agent', 'the user agent string you want')Я должен был использовать Capybara.page.driver.header('User-Agent', 'the user-agent string you want'),

Надеюсь это поможет.

Другие вопросы по тегам