Как установить заголовки запроса в спецификации запроса rspec? - PullRequest
118 голосов
/ 11 марта 2012

В спецификации контроллера я могу установить заголовок http accept так:

request.accept = "application/json"

но в спецификации запроса объект запроса равен nil. Так как я могу сделать это здесь?

Причина, по которой я хочу установить http accept header на json, заключается в том, что я могу сделать это:

get '/my/path'

вместо этого

get '/my/path.json'

Ответы [ 10 ]

130 голосов
/ 22 марта 2012

Вы должны быть в состоянии указать заголовки HTTP в качестве третьего аргумента для вашего метода get (), как описано здесь:

http://api.rubyonrails.org/classes/ActionDispatch/Integration/RequestHelpers.html#method-i-get

и здесь

http://api.rubyonrails.org/classes/ActionDispatch/Integration/Session.html#method-i-process

Итак, вы можете попробовать что-то вроде этого:

get '/my/path', nil, {'HTTP_ACCEPT' => "application/json"}
38 голосов
/ 14 июня 2012

Я использовал это в Test :: Unit:

@request.env['HTTP_ACCEPT'] = "*/*, application/youtube-client"
get :index
18 голосов
/ 17 сентября 2013

Для меня это работает просто request.headers["My Header"] = "something"

13 голосов
/ 05 апреля 2017

Я добавляю это здесь, так как я в основном застрял, пытаясь сделать это в Rails 5.1.rc1

Подпись метода get теперь немного отличается.

Вам нужно указатьпараметры после пути в качестве аргументов ключевых слов, т.е.

get /some/path, headers: {'ACCEPT' => 'application/json'}

FYI, полный набор аргументов ключевых слов:

params: {}, headers: {}, env: {}, xhr: false, as: :symbol

8 голосов
/ 31 июля 2015

Использование rspec с Rack::Test::Methods

header 'X_YOUR_HEADER_VAR', 'val'
get '/path'

Переменная заголовка будет выглядеть как X-Your-Header-Var

8 голосов
/ 20 марта 2015

Я должен установить заголовки отдельно

request.headers["Accept"] = "application/json"

Попытка отправить его через get / delete / .... - полный мусор в rails4 и вызывает боль в моей голове, потому что он никогда не отправляется как заголовок, а как параметр.

{"Accept" => "application/json"}
4 голосов
/ 22 июня 2018

С RSpec 3 вы можете использовать следующий синтаксис

get my_resource_path, params: {}, headers: { 'HTTP_ACCEPT' => "application/json" }

Как описано в официальной документации Rspec (ссылка указывает на v3.7)

4 голосов
/ 18 октября 2016

Чтобы отправить и xhr: true, и заголовки, я должен был сделать, например ::10000

my_headers = { "HTTP_ACCEPT": "application/json" }
get my_path, xhr: true, headers: my_headers
3 голосов
/ 11 марта 2012

Попробуйте что-то вроде:

get :index, :format => 'json' 
2 голосов
/ 19 декабря 2014

На ваш вопрос уже был дан ответ, но если вы хотите ПОСТАВИТЬ что-то в другое действие, вы должны сделать следующее:

post :save, {format: :json, application: {param1: "test", param2: "test"}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...