Тест Rspec CanCan AbilityClass не создает правила в Rails3.2 - PullRequest
0 голосов
/ 28 ноября 2018

В моей тестовой среде Cancan не строит свои правила.

способность. Rb

class Ability
 include CanCan::Ability

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

    if user.is_admin?
      can :manage, :all
    end
    ....
  end
 end

Когда я запускаю консоль разработки и выполняю следующие действия

 u = User.where(role: "admin").first
 u.ability.can?(:read, Order)        #true
 a = Ability.new(u)
 a.instance_values["rules"]          #gives [0] #<CanCan::Rule:0x000055f2637ece48 @match_all=false, @base_behavior=true, @actions=[:read], @subjects=[Order(id: integer, ....

показывает, что все работает нормально.Правила установлены.При этом в rails c test a.instance_values["rules"] пусто

 u = User.where(role: "admin").first
 u.ability.can?(:read, Order)        #false
 a = Ability.new(u)
 a.instance_values["rules"]          #gives [] 

В результате тест

RSpec.describe Ability do
  describe 'User' do
    describe "abilities" do
      context "when is an  Admin" do
       subject(:admin){ AdminAbility.new(create(:admin_user)) }
         it do  
           puts admin.can? :read, Order #false
           puts admin.ability.can? :read, Order #false
           puts admin.instance_values["rules"]      # nil   ?
           expect(admin).to be_able_to(:read, Order)
         end 
         it {expect(admin).to be_able_to(:read, User) }
        end 
       end 
      end 
    end

неудивительно проходит с

** Failure/Error: it {expect(admim).to be_able_to(:read, Order)}
   expected to be able to :read Order(...)**

Во времяпри тестовом запуске ключ rules отсутствует (ноль) в хэше instance_values.Там правильно генерируются для среды разработки (и производства).(Я протестировал FactorySetup для ролей и Adminuser, это не проблема)

Настройка: Rails: 3.2.22.2 Rspec: 3.8 CanCan: 1.6.10

...