0

私は自分のウェブサイトのいくつかの領域を確実に保護するためにdeviseとcancanを使用しています。

ある役割を持つユーザーがアクセスでき、別の役割がアクセスできないことを確認するのに最適なツールはどれですか?実際、私はいくつかのキュウリ機能を作成して、管理者ロールを持つユーザーがページを表示できるようにし、他のすべてのロールは表示できないようにします(エラーメッセージを受信します)。それを行うためのより良い方法はありますか?

rspecよりもcucumberを使用する場合と、cucumberよりもrspecを使用する場合について多くのことを読みました。私が得た一般的な考え方は、cucumberで「ユーザーはこれを言う」と言うべきであり、rspecでは内部ですべてが正しく機能している...ちなみに、この一般的な概念を仕事に適用するのは難しいです。正直なところ、時間の無駄だと思います。最終ページを確認できる場合、たとえばコントローラーをテストする必要があるのはなぜですか?モデルの検証とモデルの機能をテストするだけの価値があると思います。

なにか提案を?コンセプトをできるだけ早く適用しなければならないので、おそらくRSpecの本よりも実用的なものです。

4

2 に答える 2

1

コメントから拡張します。

https://github.com/ryanb/cancan/wiki/Testing-Abilitiesに基づいて、テストするために次のことを行います。

管理者仕様の内部。

require 'spec_helper'
require 'cancan/matchers'

describe Administrator do
 describe "abilities" do
    subject { ability }
    let(:ability) { Ability.new(admin) }
    let(:account) { FactoryGirl.create :account, isp: admin.isp }

    context "is a helpdesk admin" do
      let(:admin) { FactoryGirl.create :helpdesk_admin }
      let(:mail_user) {FactoryGirl.create :mail_user, account: account}
      let(:web_user) {FactoryGirl.create :web_user, account: account }
      let(:radius_user) { FactoryGirl.create :radius_user, account: account}

      it { should be_able_to(:change_password,mail_user)}
      it { should be_able_to(:change_password,radius_user)}
      it { should be_able_to(:change_password,web_user)}
      it { should_not be_able_to(:manage, Account.new) }
    end

    context "is a realm admin" do
      let(:admin) { FactoryGirl.create :realm_admin }
      it{ should be_able_to(:manage, MailDomain.new)}
      it{ should be_able_to(:manage, RadiusDomain.new)}
      it{ should be_able_to(:manage, WebDomain.new)}
      it{ should be_able_to(:manage, Administrator.new)}
    end
end

これにより、各役割が割り当てた能力をテストできます

次に、機能内で/コントローラーごとにこのようなことを行い、承認を忘れないようにします。

context "regular admin" do
    let(:admin) {FactoryGirl.create(:admin)}
     before(:each) do
      visit login_path
      fill_in "email" , with: admin.email
      fill_in "password", with: admin.password
      click_button "Sign in"
    end

     it "shoudln't allow them to add new admins" do 
       visit new_administrator_path
       page.should have_content "You are not authorized to access this page."
     end

  end
于 2013-01-19T21:54:34.447 に答える
0

キュウリはビジネスケースのテストに適しています。たとえば、ビルはベンのプロファイルを編集できません。RSpecは、より徹底的な分析に適している可能性がありますが、DeviseとCanCanの両方がこれを行ったと信頼できることを願っています。

非常に単純な機能を記述できるように、Cucumberを使用して認証を処理するいくつかの興味深い方法を示すサンプルプロジェクトがあります。これらのアイデアを役割での使用に拡張するのにそれほど時間はかかりません。いくつかの使用を願っています

ここを参照してください

于 2013-01-21T20:21:01.803 に答える