Прежде всего, переместите метод admin?
на модель User
, чтобы его можно было повторно использовать в Model-View-Controller.
class User < ApplicationRecord
def admin?
role == 'admin'
end
end
Этот метод можно использовать везде, где у вас есть доступ к экземпляр User
. Так что current_user.admin?
также будет работать для всех видов и контроллеров.
Теперь вы должны написать тест для модели, а не контроллера. Также я заметил, что вы создаете объект пользовательской модели вручную вместо использования Factory. Используйте FactoryBot для создания необходимых экземпляров для тестирования.
Вот краткое описание c при условии, что для пользователя установлена фабрика
require 'rails_helper'
RSpec.describe User, type: :model do
describe '.admin?' do
context 'user has role set as admin' do
let!(:user) { build(:user, role: 'admin') }
it 'returns true' do
expect(user).to be_admin
end
end
context 'user has role set as non admin' do
let!(:user) { build(:user, role: 'teacher') }
it 'returns true' do
expect(user).not_to be_admin
end
end
end
end