2013-02-21 75 views
0

我正嘗試在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。

任何想法?

+0

這是控制器規格還是要求/功能規格? – zetetic 2013-02-22 03:48:11

+0

現在它是一個控制器規格。這可能會導致問題嗎? – bencpeters 2013-02-22 17:05:42

回答

2

看起來你很困惑請求(功能)規格與控制器規格。 visit用於請求規格。對於控制器的規格,你想是這樣的:

describe "get page name of request" do 
    it "should generate http success for a defined partial" do 
     get :index 
     response.should be_success 
    end 
end 

使用getpost的相應操作名稱以測試控制器相應採取的措施。