2011-11-15 41 views
2

我有幾個'管理員'控制器,所有這些控制器都從AdminController繼承,它具有之前的過濾器,它僅限制對管理員的訪問。如何測試前面幾個控制器/操作中的過濾器?

我想要我的功能測試來檢查只有管理員可以訪問屬於我的管理系統的每個控制器的每個動作。什麼是最簡潔的方式來做到這一點?

(我使用的是內置的測試/單元的標準)

回答

2

我認爲最簡潔的方式是通過元編程:

AdminController.subclasses.each do |controller| 
    describe controller do 
    controller.action_methods.each do |action_method| 
     it "redirects non-admin user on #{action_method}" do 
     get action_method 
     assert_redirected_to home_path 
     end 
    end 
    end 
end 

你必須處理得與職位,可能有一些錯別字,但希望能給你一些啓動。 (此外,這是使用minispec語法,你必須翻譯一下測試/單元。)

我可能會建議只是在控制器的基礎上添加簡單的測試,但這是可能是一個很好的集成測試,以確保你不會錯過任何。

+0

謝謝,AdminController.subclasses和controller.action_methods是我所需要的。我創建了一個'http_method_for_action(action)'方法來猜測應該使用哪個http方法。 –

相關問題