Railsでカスタムリダイレクトページのrspecテストを作成しようとしています。基本的に、routes.rbにページ名を取得するワイルドカード一致があり、その名前のパーシャルが存在するかどうかをチェックする「Pages」コントローラーのshowメソッドがあります。一致するパーシャルが見つからない場合は、404ページをレンダリングし、ステータスを404に設定します。これはすべてブラウザで機能しますが、rspecはこれを404ではなく200の「OK」応答と見なします。
コード:Pages controller showメソッド(partial_exists?は私が徹底的にテストしたプライベートメソッドであり、rspecの実行時に_missing.html.erbが期待どおりにレンダリングされていることをテストログを使用して確認できます)
def show
@page_name = params[:page_name].to_s.gsub(/\W/,'')
unless partial_exists?(@page_name)
render :partial => 'missing', :status => :not_found
end
end
ルート.rb:
match '/' => 'pages#show', :page_name => 'index'
match '*page_name' => 'pages#show'
仕様:
require 'spec_helper'
describe PagesController do
render_views
describe "get page name of request" do
it "should generate http success for a defined partial" do
visit '/'
response.should be_success
end
it "should give respond with the 404 missing page for an undefined partial" do
visit '/blahblahblah'
response.status.should be(404)
end
end
end
最初のテストは期待どおりに実行され、ステータスコード200で_index.html.erbを部分的にレンダリングします。2番目のテストは_missing.html.erbをレンダリングします(テストログを見てこれを確認しました)が、ステータスコードを報告します予想どおり404ではなく200です。ブラウザで実行すると、ステータスコード404で_missing.html.erbがレンダリングされます。
何か案は?