Na especificação do controlador, posso definir o cabeçalho http accept como este:
request.accept = "application/json"
mas na especificação da solicitação, o objeto "request" é nulo. Então, como posso fazer isso aqui?
O motivo pelo qual desejo definir o cabeçalho http accept como json é para que eu possa fazer isso:
get '/my/path'
em vez disso
get '/my/path.json'
ruby-on-rails
json
testing
rspec
Sergey
fonte
fonte
get '/my/path', nil, {'HTTP_ACCEPT' => "application/json"}
:authorization
.get my_resource_path, params: {}, headers: { 'HTTP_ACCEPT' => "application/json" }
`Eu usei isso em Test :: Unit:
fonte
ActionController::TestCase
Cookie
no hash dos cabeçalhos (porque é isso que meu navegador envia), mas não funcionou. Então eu fizrequest.keys
e vi uma chave chamadaHTTP_COOKIE
. Usando isso funcionou. Eles realmente devem documentar isso melhor.Estou adicionando isso aqui, pois fiquei muito preso tentando fazer isso no Rails 5.1.rc1
A assinatura do método get é um pouco diferente agora.
Você precisa especificar as opções após o caminho como argumentos de palavra-chave, ou seja,
get /some/path, headers: {'ACCEPT' => 'application/json'}
Para sua informação, o conjunto completo de argumentos de palavras-chave é:
params: {}, headers: {}, env: {}, xhr: false, as: :symbol
fonte
Isso está funcionando para especificações do controlador, não para solicitar especificações:
fonte
request.headers
ourequest.env
Eu tenho que configurar cabeçalhos separadamente
Tentar enviá-lo via get / delete / .... é um lixo completo no rails4 e está causando dor na minha cabeça porque nunca é enviado como cabeçalho, mas como parâmetro.
fonte
Usando rspec com
Rack::Test::Methods
O cabeçalho var será exibido como
X-Your-Header-Var
fonte
Test::Unit
, não para RSpec.ndefined method 'header'
erro para mim.Com o RSpec 3, você pode usar a seguinte sintaxe
Conforme descrito na documentação oficial do Rspec (o link aponta para a versão 3.7)
fonte
Para enviar ambos
xhr: true
e cabeçalhos, tive que fazer, por exemplo:fonte
headers =
sermy_headers =
?Sua pergunta já foi respondida, mas caso você queira postar algo para outra ação, você deve fazer o seguinte:
fonte
Tente algo como:
fonte
format=json
como um parâmetro de consulta. Não é o mesmo que um campo de cabeçalho.