Тестирование контроллера (без модели) Действие с RSpec, использующим cancancan - PullRequest
0 голосов
/ 26 ноября 2018

У меня есть контроллер без модели, и у меня есть три роли, которые определены целыми числами.[1 для admin , 2 для Руководитель группы и 3 для Член команды ].Я хочу протестировать в RSpec, что мое действие контроллера правильно доступно через cancancan авторизацию.До сих пор я применил авторизацию для Team Member и смог правильно визуализировать представления во внешнем интерфейсе.Но в случае тестирования я получаю ошибку.

 #My TeamMember Controller File

  class TeamMemberController < ApplicationController

    authorize_resource :class => TeamMemberController
      def index
        @user = User.new
        user = User.find(session[:current_user_id])
        if user.status == 1
          total_leave = 21
        elsif user.status == 2
          total_leave = 17
        end

        available_leave = user.leave_balance

        session[:total_leave] = total_leave
        session[:available_leave] = available_leave

        @leaves = Leave.where(user_id: session[:current_user_id])
      end

      def logOut
        reset_session
        redirect_to(:controller => 'user', :action => 'index')
      end

    end

Ability.rb

#My Ability.rb file
class Ability
  include CanCan::Ability

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

    if user.present?
      if user.role == 3
        can [:index, :logOut], [:TeamMemberController]
      end
    end
  end
end

Мой файл RSpec

describe User do
  subject(:ability){ Ability.new(user) }
  let(:user){ FactoryBot.build(:user, role: 3) }

  context "when is a Team Member" do
    let(:role) {FactoryBot.build(:user)}
      it "Should be able to Index#TeamMember" do
        should be_able_to :index, TeamMemberController
    end
  end
end

Заводской файл для создания пользователя

factory :user do
    id {45}
    team_lead_id {2}
    name {'Test Name'}
    email {'Test Email'}
    password {'Test Password'}
    joining_date {'2018-04-04'.to_date}
    status {2}
    role {3}
    leave_balance {17}
    encrypted_password {"Test"}
    confirmation_token {"Test"}
    remember_token {"Test"}
  end

И ошибка, которую я получаю:

User when is a Team Member Should be able to Index#TeamMember
     Failure/Error: should be_able_to :index, TeamMemberController
       expected to be able to index TeamMemberController

Итак, как я могу проверить действия моего контроллера, которые используют cancancan в RSpec?

...