2016-12-02 16 views
1

我有這樣的代碼:rspec的檢查視圖顯示

shared_examples "admin common actions" do |resource| 

     describe "logged admin" do 
     login_admin 

     describe 'GET #index' do 
      it 'responds with 200' do 
      get :index, :format => :html 
      expect(response).to have_http_status(200) 
      end 
     end 
     end 
    end 

所以我的情況下,我認爲預期有一定的錯誤,不渲染測試將失敗的原因服務器會返回500。當視圖未呈現時,我的案例測試通過。我檢查了網址,沒關係。那麼我做錯了什麼?

+0

您應該向'describe'添加'render_views',但這會減慢你的規格,只有在你要測試視圖的時候纔會這樣做。看看這裏https://www.relishapp.com/rspec/rspec-rails/v/2-1/docs/controller-specs/render-views。 – fanta

+0

如果您預計500錯誤,您爲什麼要測試200響應。你是什​​麼意思你檢查了網址,這沒關係?在這種情況下,確定服務器是否迴應了500錯誤代碼?你是如何測試這個的 - 通過在瀏覽器中輸入它?查看與此相關的其他代碼會很有幫助 - 例如控制器索引代碼,視圖以及測試的相關信息。 – David

+0

所以我檢查了響應對象輸出http://pastie.org/10975039,測試的範圍是查看是否所有視圖都呈現沒有錯誤,我故意在視圖中發生錯誤,讓測試失敗,並且它仍然沒有失敗,當我在瀏覽器中嘗試這個視圖時,我有500個狀態返回 – maki

回答

0

問題是,rspec在運行控制器測試時實際上並不實際呈現視圖,以便從渲染視圖中隔離控制器操作的單元測試。理想情況下,視圖的呈現應該是視圖規範的關注點。

但是,如果你真的想在你的控制器中測試這個,你可以告訴rspec渲染視圖。這將不會生成內部Web服務器500狀態代碼,它會拋出一個異常,所以您可以確保它正在渲染視圖,通過測試沒有發生異常而不是測試狀態500.

shared_examples "admin common actions" do |resource| 
    describe "logged admin" do 
    login_admin 

    describe 'GET #index' do 
     it 'responds with 200' do 
     get :index, :format => :html 
     expect(response).to have_http_status(200) 
     end 

     context 'when rendering view' do 
     render_views 

     it 'renders the view' do 
      expect { get :index, :format => :html }.to_not raise_error 
     end 
     end 
    end 
    end 
end 
+0

我仍然有相同的結果,所有測試都通過 – maki

+0

嗯有多奇怪......上面的代碼經過測試,發現對我來說行爲正確。我不確定還有什麼建議。 – David

+0

也許有另一種方法來檢查視圖是否呈現良好?不是來自控制器規範例如 – maki