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)

questionAnswers(2)

yourAnswerToTheQuestion