Estou tentando testar um controlador e recebo este erro. Eu entendo o erro, mas não sei como corrigi-lo.
test: on CREATE to :user with completely invalid email should respond with
redirect
(UsersControllerTest):ActionController::RedirectBackError:
No HTTP_REFERER was set in the request to this action,
so redirect_to :back could not be called successfully.
If this is a test, make sure to specify request.env["HTTP_REFERER"].
Especifique onde? Eu tentei isso:
setup { post :create, { :user => { :email => 'invalid@abc' } },
{ 'referer' => '/sessions/new' } }
Mas obteve o mesmo erro.
Especificá-lo com o quê, exatamente? Acho que o URI da visualização para a qual desejo voltar:
'/sessions/new'
É isso que eles querem dizer?
OK, então parece que eles querem dizer fazer isto:
setup do
@request.env['HTTP_REFERER'] = 'http://localhost:3000/sessions/new'
post :create, { :user => { :email => 'invalid@abc' } }, {}
end
Alguém pode me dizer onde isso está documentado? Eu gostaria de ler sobre o contexto dessa informação.
E se o domínio não for "localhost: 3000"? E se for "localhost: 3001" ou algo assim? Alguma maneira de antecipar isso?
Por que isso não funciona:
setup { post :create, { :user => { :email => 'invalid@abc' } },
{ 'referer' => '/sessions/new' } }
Os documentos do Rails dizem especificamente que é assim que você define os cabeçalhos.
ruby-on-rails
ruby
testing
Ethan
fonte
fonte
A resposta aceita não funciona para testes de integração porque a
@request
variável não existe.De acordo com RailsGuides , você pode passar cabeçalhos para os ajudantes.
Trilhos <= 4:
Trilhos> = 5:
fonte
get :show, params: { id: 12 }, headers: { "HTTP_REFERER" => "http://example.com/home" }
fonteEm resposta à pergunta:
Não funciona porque o documento Rails que você vinculou a documentos uma classe diferente daquela que você provavelmente está usando.
Você vinculou a
ActionController::Integration:Session
. Suponho que você esteja escrevendo um teste funcional (se estiver usando Test :: Unit) ou um teste de controlador (se estiver usando Rspec). De qualquer forma, você provavelmente está usandoActionController::TestCase
ou uma subclasse dele. Que, por sua vez, inclui o móduloActionController::TestProcess
.ActionController::TestProcess
fornece umget
método com parâmetros diferentes doget
método fornecido porActionController::Integration:Session
. (Irritante, hein?) A assinatura do método é esta:Infelizmente, não há parâmetro de cabeçalhos. Mas pelo menos a configuração
@request.env['HTTP_REFERER']
funciona.fonte
Em Rails3 eu obtive o mesmo erro:
Para me livrar disso no controlador correspondente fornecido resgate para "redirect_to: back"
Exemplo:
redirect_to :back rescue redirect_to required_path
fonte
No Rails 2.2.2, o bloco acima nunca executou o teste real. Dizendo isso
post: create, {: user => {: email => 'invalid @ abc'}}
linha não funcionou. Você pode simplesmente se livrar do bloco de configuração e usar
em vez de. E deve definir o referer
fonte
A solução mais direta para o problema acima é fazer a solicitação com os cabeçalhos associados. O Rails lerá automaticamente este cabeçalho.
fonte
Atualmente, eu usei o Rails 5.2.1, minha abordagem para stub request referer dentro do controlador é como abaixo:
fonte