2011-05-01 8 views
0

私はrails_adminを使用しており、私のレール3のアプリケーションとキュウリのアクセスコントロールのためのテストを書くことでdeviseしています。cucumber&capybaraによるアクセスコントロールのテスト

私は明示的にそうようにテストする場合、誰かではない管理者は、(例えば)

を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

1つの方法は、他のすべての管理者/コントローラが継承する管理者ネームスペースにベースコントローラを作成することです。そのベースコントローラにフィルタを前置して、管理者の認証を確認することができます。これと同じように:

#app/controllers/admin/base.rb 

class Admin::Base < ApplicationController 
    before_filter :ensure_admin_logged_in 
end 

し、admin名前空間内の他のすべてのコントローラを持っているこのいずれかから継承:

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

これはアクセス制御を実装するための良い方法のようです。ありがとうございました。しかし、どのように私はこれをテストすることが本当に働いていた? – Rimian

関連する問題