【问题标题】:Rspec: testing cancan ability with argumentsRspec:使用参数测试 cancan 能力
【发布时间】:2015-11-30 14:11:31
【问题描述】:

我正在使用 cancan gem。

我在班级中定义了能力:

module Gexcore
   class Myability
       include CanCan::Ability

    def initialize(user)
       can :delete_user, User do |victim|
      ..
        end
    end

  end
end

我正在测试使用 RSpec 删除用户的能力:

RSpec.describe "Permissions to delete user", :type => :request do
  describe 'del user' do
    it 'superadmin can delete user' do
      superadmin = double(User, :id => 10, <<some other fields>>)

      ability = Mymodule::Myability.new(superadmin)

      victim = double(User)

      res = superadmin_ability.can?(:user_del, victim)

      expect(res).to eq true

    end
  end

end

我的用户模型:

class User < ActiveRecord::Base
  delegate :can?, :cannot?, :to => :ability
  ...
end

但我的能力看不到方法can? :delete_user, User。 它需要 User 类,但 RSpec 使用 RSpec::Mocks::Double 类调用它。

如何使用 Rspec 模拟正确测试 cancan gem 的能力?

【问题讨论】:

    标签: ruby-on-rails unit-testing rspec cancan


    【解决方案1】:

    RSpec 使用的是 Double 类,因为它在您的代码中结束。类必须是User,RSpec 才能应用规则。

    let(:user) do 
      u = User.new
      u.stub!(:some_qualifier_in_your_delete_user_declaration? => true)
      u
    end
    

    See this SO archive for more of a reference.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-20
      • 1970-01-01
      相关资源
      最近更新 更多