2011-05-01 108 views
0

我在我的rails 3應用程序中使用rails_admin和devise併爲黃瓜中的訪問控制編寫測試。用黃瓜和水豚測試訪問控制

我想測試一個人不是管理員無法訪問rails_admin的所有路由(例如)

如果我明確的測試,像這樣:

Scenario: An authenticated user cannot access site administration 
    Given I am an authenticated user "kate", "[email protected]" 
    When I visit the administration page 
    Then I should see access denied 

我可以匹配字符串「管理頁面「到路線」rails_admin_dashboard_path「,並讓我的測試通過就好。但是這似乎是在錯誤地測試應用程序。我想測試所有的路線(以某種方式循環它們),而不是暗示他們,也許會錯過一兩個。

事情是這樣的:

Scenario: An authenticated user cannot access site administration 
    Given I am an authenticated user "kate", "[email protected]" 
    When I visit ANY administration page 
    Then I should see access denied 

誰能告訴我如何有效地測試呢?我採取了正確的方法嗎?我應該在rspec中做這個嗎?

正如你可能會說的,我有點n00b。

回答

1

我不認爲你應該瞄準在你的黃瓜場景來測試每一種可能的途徑。正如Andrea S.所建議的,如果所有的管理員控制器都有一個共同的基礎,那麼檢查管理員主頁就足夠了。

1

一種方法是在管理員名稱空間中創建一個所有其他管理員/控制器繼承的基礎控制器。您可以在該基本控制器中放置一個之前的過濾器來檢查管理員身份驗證。像這樣:

#app/controllers/admin/base.rb 

class Admin::Base < ApplicationController 
    before_filter :ensure_admin_logged_in 
end 

而且必須在管理員命名空間的所有其他控制器從這個繼承:

#app/controllers/admin/Pages.rb 
class Admin::PagesController < Admin::Base 
    layout "admin" 
end 
+0

這似乎是實現我的訪問控制的好方法。謝謝。但是,我怎麼能測試這真的有用? – Rimian 2011-05-01 06:09:01