簡體   English   中英

在 Rails 控制台和 Rspec 中 Cancancan 能力調試失敗

[英]Cancancan ability debugging fails in rails console and Rspec

我在models/ability.rb有這個

class Ability
  include CanCan::Ability

  def initialize(user)
    user ||= User.new   

    if user.role? :registered
      can :read Post
    end

  end

當我在 rails 控制台上執行此操作時

#this returns a user with a role: "registered" attribute   
user = User.first
post = Post.first
ability = Ability.new(user)

### This returns false ###
ability.can?(:read, post)
#=> false

我為測試能力而編寫的這個規范也失敗了,而我希望它通過。

describe User, :type => :model do
  let(:post) {create(:post)}
  describe "abilities" do
    subject(:ability){Ability.new(user)}
    let(:user){nil}

     context "when is a registered user" do

       ## the default value for the role attribute in the user factory is "registered"
       let(:user) {create(:user)}
       it {is_expected.to be_able_to :read, post}
     end
  end
end

當我在瀏覽器上作為注冊用戶進行身份驗證時,我可以訪問和閱讀/posts/posts/:id ,但我不知道為什么它在 rails 控制台和 rspec 中都失敗了。

經過我們的討論,我們得出結論,問題要么是

  1. Rails 沒有加載能力類,或者
  2. 某處的代碼以某種方式覆蓋了 Ability 類。

解決方法是通過在application.rb的末尾附加以下內容來手動加載 Ability 文件

require "#{Rails.root}/app/models/ability.rb"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM