1. ホーム
  2. ruby-on-rails

[解決済み] RailsでテストするときにHTTP_REFERERを設定するには?

2023-04-08 20:24:59

質問

あるコントローラをテストしようとしているのですが、このようなエラーが発生しました。エラーの内容は理解していますが、どのように修正すればよいのかわかりません。

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"].

どこに指定する?私はこれを試しました。

setup { post :create, { :user => { :email => 'invalid@abc' } }, 
  { 'referer' => '/sessions/new' } }

でも、同じエラーが出ました。

具体的には何で指定するのですか?戻りたいビューのURIでしょうか。

'/sessions/new'

ということなのでしょうか?


なるほど、こういう意味だったんですね。

setup do
  @request.env['HTTP_REFERER'] = 'http://localhost:3000/sessions/new'
  post :create, { :user => { :email => 'invalid@abc' } }, {}
end

どなたか、それがどこで文書化されているのか教えていただけませんか?その情報の背景を読んでみたいのです。

ドメインが "localhost:3000" でない場合はどうなるのでしょうか?もし、"localhost:3001" か何かであったら?それを予期する方法はありますか?

なぜこれがうまくいかないのでしょう。

setup { post :create, { :user => { :email => 'invalid@abc' } }, 
  { 'referer' => '/sessions/new' } }

Railsのドキュメント は、具体的には と書いてありますが、これはヘッダを設定する方法です。

どのように解決するのですか?

彼らの提言を訳すと、次のようになります。

setup do
  @request.env['HTTP_REFERER'] = 'http://test.com/sessions/new'
  post :create, { :user => { :email => 'invalid@abc' } }
end