0

質問を書いているときにこれに出くわし、答えを見つけました-これは一般的なユースケースであるため、共有したいと思いました. 少し前まで、次の問題がありました。

次のコードでエラー コントローラーを使用して、Rails アプリケーション用のカスタム 404 ページをセットアップしました。

def index
    render "errors/index", status: 404
end

存在しないルートがアクセスされるたびに、この 404 ページをレンダリングするようにルートを設定しました。

devise_for :users

get "errors/index", as: :error
get "*not_found", to: "errors#index" # this is the important line

root to: "welcome#index"

そして実際、それは機能します。ただし、何らかの理由で、これに対する私の仕様は機能しません。

it "renders 404 on unknown route" do
    get("/thisrouteiswrong").should route_to("errors#index")
end

ターミナルで生成される出力は次のとおりです。

The recognized options <{"controller"=>"errors", "action"=>"index", "not_found"=>"thisrouteiswrong"}> did not match <{"controller"=>"errors", "action"=>"index"}>, difference: <{"not_found"=>"thisrouteiswrong"}>.
   <{"controller"=>"errors", "action"=>"index"}> expected but was
   <{"controller"=>"errors", "action"=>"index", "not_found"=>"thisrouteiswrong"}>.
4

1 に答える 1

3

端末のエラーが示すように、リクエストにはnot_found、ルートを介して設定されるもう 1 つのパラメーターが呼び出されます。私がしなければならなかったのは、次のようにそのパラメータをテストに渡すことだけでした:

it "renders 404 on unknown route" do
    get("/thisrouteiswrong").should route_to("errors#index", "not_found" => "thisrouteiswrong")
end
于 2013-01-21T14:51:57.237 に答える