我正在尝试为 RyanBates 编写 CanCan 的权限规范,但出现错误 "uninitialized constant Ability::CanCan"
I was trying write permissions specs for CanCan by RyanBates but got error "uninitialized constant Ability::CanCan"
我认为这个问题 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
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-核心 (3.1.7)
- rspec-期望值(3.1.2)
- rspec-模拟 (3.1.3)
- rspec-rails (3.1.0)
- rspec-支持(3.1.2)
- 康康 (1.6.10)
我得到了问题的答案。
问题是 spec
文件的 filename
应该是
spec/cancan/ability_spec.rb
但它是
spec/cancan/ability.rb
我应该调用
bundle exec rspec spec/cancan/ability_spec.rb
欲了解更多详情,请访问此 link RSpec naming conventions for files and directory structure
我认为这个问题 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
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-核心 (3.1.7)
- rspec-期望值(3.1.2)
- rspec-模拟 (3.1.3)
- rspec-rails (3.1.0)
- rspec-支持(3.1.2)
- 康康 (1.6.10)
我得到了问题的答案。
问题是 spec
文件的 filename
应该是
spec/cancan/ability_spec.rb
但它是
spec/cancan/ability.rb
我应该调用
bundle exec rspec spec/cancan/ability_spec.rb
欲了解更多详情,请访问此 link RSpec naming conventions for files and directory structure