2015-09-23 85 views
4

我有幾十個控制器測試,去的曲調:如何幹涸控制器測試

test "GET #show when not authenticated" do 
    get :show, { id: 1 } 
    assert_redirected_to '/login' 
end 

但我application_controller默認情況下鎖定。

class ApplicationController < ActionController::Base 
    before_action :ensure_logged_in 
end 

我不應該將這個測試添加到每個控制器測試。但我不想僅測試一個控制器。

我該如何測試我的應用程序是否被鎖定,而不會亂丟我的控制器測試?

+0

測試一次'。 – BroiSatse

+0

@BroiSatse但ApplicationController沒有任何動作,或任何渲染視圖,沒有任何路由。 –

+0

RSpec允許您創建匿名控制器,在其上定義僞造行爲並測試其行爲,因爲它應該只是因爲它從另一個控制器繼承。 Docs here:https://www.relishapp.com/rspec/rspec-rails/docs/controller-specs/anonymous-controller – BroiSatse

回答

4

您可以使用:

test "Should redirect to login when user is not logged in" do 
    [:show, :edit, :new].each do |action| 
     get action, {id: 1} 
     assert_redirected_to '/login' 
    end 
end 

並命名的測試,如:

測試 '重定向到登錄頁面時沒有授權' 測試'的ApplicationController時做