Я делал это раньше в приложении rails 2 в ActionController::IntegrationTest
с
get '/', {}, {:user_agent => "Googlebot"}
но в Rails 3 это больше не работает.
Что мне делать?
Я делал это раньше в приложении rails 2 в ActionController::IntegrationTest
с
get '/', {}, {:user_agent => "Googlebot"}
но в Rails 3 это больше не работает.
Что мне делать?
Если вы используете request.user_agent в своем приложении, вы можете написать следующий код:
get '/', {}, { "HTTP_USER_AGENT" => "Googlebot" }
Ни один из вышеперечисленных ответов не работал у меня, вот что, наконец, работало в тесте контроллера rspec:
@request.user_agent = "a MobileDevice/User-Agent"
post :endpoint, param: 2354
Я исправил это поведение, и с Rails 4.0 вы сможете указать фактические заголовки HTTP, такие как "User-Agent" и "Content-Type" в интеграционных и функциональных тестах. Больше нет необходимости указывать их как переменные CGI.
Если вас это интересует, вы можете взглянуть на изменение: https://github.com/rails/rails/pull/9700
Если у вас есть набор спецификаций, для которых все требуются определенные пользовательские агенты, вы можете найти следующие советы для СУШИЛЬНОСТИ ваших спецификаций:
Определите это где-нибудь (например, spec_helper.rb
):
module DefaultUserAgent
def post(uri, params = {}, session = {})
super uri, params, {'HTTP_USER_AGENT' => MY_USER_AGENT}.merge(session)
end
def get(uri, params = {}, session = {})
super uri, params, {'HTTP_USER_AGENT' => MY_USER_AGENT}.merge(session)
end
end
Тогда просто include DefaultUserAgent
, когда вам это нужно.
Для себя, в тесте контроллера в rspec3, я использовал
request.env["HTTP_USER_AGENT"] = "Hello"
Перед тем, как сделать запрос
Я смог заставить его работать на Rails 5.2.1, используя это:
get '/path', headers: { 'HTTP_USER_AGENT' => 'Mozilla/5.0 (blah blah)' }
Я искал здесь подходящих ключевых слов для метода.
Пользовательский агент - это только HTTP-заголовок, поэтому вы можете использовать следующие методы: http://guides.rubyonrails.org/testing.html#helpers-available-for-integration-tests
И передать пользовательский агент в заголовки (я не тестировал это):
headers = {"User-Agent" => "Googlebot"}
request_via_redirect(:get, '/', {}, headers)