【问题标题】:I was trying write permissions specs for CanCan by RyanBates but got error "uninitialized constant Ability::CanCan"我正在尝试由 RyanBates 为 CanCan 编写权限规范,但出现错误“未初始化的常量 Ability::CanCan”
【发布时间】:2015-09-16 05:52:26
【问题描述】:

我不认为这个问题CanCan uninitialized constant Ability::CanCan 解决了我的问题。

根据 CanCan 测试 Abilities 并不难。我跟着https://github.com/ryanb/cancan/wiki/Testing-Abilities写规范:

当我尝试以下命令时

bundle exec rspec spec/cancan/ability.rb 

我收到以下错误

/projects/ATS/app/models/ability.rb:2:in `<class:Ability>': uninitialized constant Ability::CanCan (NameError)
        from /home/shiva/projects/ATS/app/models/ability.rb:1:in `<top (required)>'
        from /home/shiva/projects/ATS/spec/cancan/ability.rb:3:in `<top (required)>'
from /home/shiva/.rvm/gems/ruby-2.1.1/gems/cancan-1.6.10/lib/cancan.rb:1:in `<top (required)>'
        from /home/shiva/projects/ATS/spec/rails_helper.rb:14:in `<top (required)>'
        from /home/shiva/projects/ATS/spec/cancan/ability.rb:1:in `<top (required)>'

我的代码在spec/cancan/ability.rb

require 'rails_helper'

RSpec.describe Ability, type: :model do
  subject(:ability) {Ability.new(user)}
  let(:user) {nil}
  context 'Logged in as CSA' do
    let(:org) {create(:organization)}
    let(:user) {create(:user, organization: org, role_ids: [Role::ROLE_CSA])}
    describe 'Not Permitted' do
      it 'to visit /admins' do
          it {is_expected.to be_able_to(:manage, Workflow.new)}
      end

    end
  end
end

models/ability.rb中的sn-p中的代码

class Ability
  include CanCan::Ability

  def initialize(user, url, admin_session_id, my_applicant_id)
    if user.present?
      user.roles[0].permissions_by_organization(user).each do |permission|
        case permission.subject_class

组件的版本详情

  • Rails 4.0.4
  • rspec-core (3.1.7)
  • rspec 期望 (3.1.2)
  • rspec 模拟 (3.1.3)
  • rspec-rails (3.1.0)
  • rspec 支持 (3.1.2)
  • 康康 (1.6.10)

【问题讨论】:

  • 你可能想试试 CanCanCan 的 Rails 4。它是 CanCan 的延续版本,因为它已经过时了。
  • 我会的,但我目前正在进行一个运行多年的项目,所以我不能升级到 CanCanCan。

标签: ruby-on-rails ruby-on-rails-4 rspec cancan


【解决方案1】:

我的问题得到了答案。

问题是spec 文件的filename 应该是
spec/cancan/ability_spec.rb 但它是
spec/cancan/ability.rb

我应该调用
bundle exec rspec spec/cancan/ability_spec.rb

更多详情请访问此链接RSpec naming conventions for files and directory structure

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 2017-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多