Я пытался записать спецификации разрешений для CanCan от RyanBates, но получил ошибку неинициализированной константы Ability::CanCan

Я не думаю, что эта проблема неинициализированная константа CanCan 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

Версия Детали компонентов

  • Рельсы 4.0.4
  • rspec-ядро (3.1.7)
  • rspec-ожидания (3.1.2)
  • rspec-моки (3.1.3)
  • rspec-рельсы (3.1.0)
  • rspec-поддержка (3.1.2)
  • канкан (1.6.10)

person illusionist    schedule 16.09.2015    source источник
comment
вы можете попробовать CanCanCan для Rails 4. Это продолжающаяся версия CanCan, так как она отсутствует даты.   -  person nayiaw    schedule 16.09.2015
comment
Я бы сделал это, но в настоящее время я работаю над проектом, работающим уже много лет, поэтому мне не разрешено переходить на CanCanCan.   -  person illusionist    schedule 16.09.2015


Ответы (1)


Я получил ответ на свой вопрос.

Проблема заключалась в filename файла spec Должно было быть
spec/cancan/ability_spec.rb, но было
spec/cancan/ability.rb

и я должен был вызвать
bundle exec rspec spec/cancan/ability_spec.rb

Для получения дополнительной информации посетите эту ссылку соглашения об именах файлов RSpec. и структура каталогов

person illusionist    schedule 16.09.2015