0

我正在使用 devise 和 cancan 来确保保护我网站的某些区域。

什么工具最适合检查具有角色的用户可以访问而另一个角色不能访问?实际上,我正在创建几个黄瓜功能以确保具有管理员角色的用户可以看到该页面,而所有其他角色则不能(收到错误消息)。有没有更好的方法来做到这一点?

我已经阅读了很多关于何时在 rspec 上使用 cucumber 以及何时在用户 rspec 上使用 cucumber,我得到的一般想法是我应该用 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

Cucumber 更适合商业案例测试,例如 Bill 不能编辑 Ben 的个人资料。RSpec 可能更适合进行更详尽的分析,但希望您可以相信 Devise 和 CanCan 已经为您完成了这项工作。

我有一个示例项目,它展示了一些使用 Cucumber 进行身份验证的有趣方法,因此您可以编写非常简单的功能。将这些想法扩展到角色使用并不需要太多。希望它有一些用处

看这里

于 2013-01-21T20:21:01.803 回答