Acesso ao objeto de solicitação nas especificações de solicitação
Como posso definir os cabeçalhos da solicitação antes de fazer a solicitação em uma especificação de solicitação?
Estou movendo as especificações do controlador para solicitar especificações na minha API usando o Rails. Uma coisa em que estou preso é que não tenho acesso a umrequest
objeto para permitir os pedidos.
Nas especificações do meu controlador, tenho acesso a um método que criei que assina um usuário específico:
def sign_in(user)
token = user.api_keys.first.token
# note the request object being used in the next line
request.env["HTTP_AUTHORIZATION"] = ActionController::HttpAuthentication::Token.encode_credentials(token)
end
Isso funciona bem nas especificações do controlador, posso fazer com segurança:
before { sign_in(user) }
it { post :endpoint, params }
Mas em uma especificação de solicitação, orequest
objeto não está disponível. Se eu tentar:
before { sign_in(user) }
it { post "/api/endpoint", params }
eu receborequest
no meu método auxiliar comonil
.
Eu sei que eu poderia fazer:
it { post "/api/endpoint", {"HTTP_AUTHORIZATION" => ... } }
Mas isso parece bastante confuso nas especificações, especialmente em comparação com as especificações de um controlador.
Eu tentei usarActionDispatch::TestRequest::DEFAULT_ENV
como sugerido poresta resposta, mas também não funcionou (recebo uma401
)