Можно ли указать пользовательский агент в тесте интеграции спецификации или рельсы? - PullRequest
36 голосов
/ 08 декабря 2010

Я делал это раньше в приложении rails 2 в ActionController::IntegrationTest с

get '/', {}, {:user_agent => "Googlebot"}

но это, похоже, больше не работает в Rails 3.

Что мне делать?

Ответы [ 6 ]

43 голосов
/ 06 января 2011

Если вы используете request.user_agent в своем приложении, вы можете написать следующий код:

get '/', {}, { "HTTP_USER_AGENT" => "Googlebot" }
15 голосов
/ 31 мая 2013

Ни один из приведенных выше ответов не сработал для меня, вот что наконец-то сработало в тесте контроллера rspec:

@request.user_agent = "a MobileDevice/User-Agent"
post :endpoint, param: 2354
7 голосов
/ 15 марта 2013

Я исправил это поведение, и с помощью Rails 4.0 вы сможете указывать фактические заголовки HTTP, такие как «Пользователь-агент» и «Тип контента» в интеграционных и функциональных тестах. Больше нет необходимости указывать их в качестве переменных CGI.

Если вы заинтересованы, вы можете посмотреть на изменение: https://github.com/rails/rails/pull/9700

3 голосов
/ 12 мая 2015

Для себя в тесте контроллера в rspec3 я использовал

request.env["HTTP_USER_AGENT"] = "Hello"

Перед выполнением запроса

3 голосов
/ 28 сентября 2012

Если у вас есть набор спецификаций, для которых всем требуется определенный пользовательский агент, вы можете найти следующие подсказки, чтобы высушить ваши спецификации:

Определите это где-нибудь (например, 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, когда вам это нужно.

0 голосов
/ 08 декабря 2010

Пользовательский агент - это просто заголовок http, поэтому вы можете использовать следующие методы: http://guides.rubyonrails.org/testing.html#helpers-available-for-integration-tests

И передать пользовательский агент заголовкам (я не проверял это):

headers = {"User-Agent" => "Googlebot"}
request_via_redirect(:get, '/', {}, headers)
...