我正嘗試在Rails中爲自定義重定向頁面編寫rspec測試。基本上,我在routes.rb中獲得了一個通配符匹配,它獲取一個頁面名稱,並在「Pages」控制器中顯示一個show方法,用於檢查該名稱是否存在部分內容。如果找不到匹配的部分,則會呈現404頁面並將狀態設置爲404。所有這些在瀏覽器中都可以使用,但是rspec將其視爲200「OK」響應,而不是404.Rspec顯示與瀏覽器不同的狀態代碼
代碼: 頁控制器顯示方法(?partial_exists是,我已經徹底測試一個私有方法,我可以驗證使用按預期_missing.html.erb所呈現RSpec的運行時的測試日誌)
def show
@page_name = params[:page_name].to_s.gsub(/\W/,'')
unless partial_exists?(@page_name)
render :partial => 'missing', :status => :not_found
end
end
routes.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
第一次測試運行正常,並呈現_index.html.erb部分爲200的狀態代碼的第二測試渲染_missing.html.erb(我通過觀察測試日誌驗證了這一點),但報告的狀態代碼爲200,而不是預期的404。當我在瀏覽器中運行它時,它會呈現狀態碼爲404的_missing.html.erb。
任何想法?
這是控制器規格還是要求/功能規格? – zetetic 2013-02-22 03:48:11
現在它是一個控制器規格。這可能會導致問題嗎? – bencpeters 2013-02-22 17:05:42