我正在使用Pundit
在我的应用程序中使用rspec进行测试。
require 'rails_helper'
describe SubjectPolicy do
subject { described_class.new(user, subject) }
let(:subject) { Subject.create }
context 'is an administrator' do
let(:role) { Role.create(role_name: 'admin') }
let(:user) { User.create(role_id: role.id) }
it { is_expected.to permit_actions([:index]) }
end
context 'is a teacher' do
let(:role) { Role.create(role_name: 'teacher') }
let(:user) { User.create(role_id: role.id) }
it { is_expected.to forbid_actions([:index]) }
end
end
运行此规范测试的测试时,我收到以下错误。
Failure/Error: it { is_expected.to permit_actions([:index]) }
NoMethodError: undefined method 'index?' for #<Subject:0x007fdcc1f70fd0>
此索引操作有一条路径,它位于我的subjects_controller
中。
主题政策中的代码非常简单。
class SubjectPolicy < ApplicationPolicy
def index?
@user.is_admin?
end
end
以下是我subjects_controller
def index
@subjects = Subject.all
authorize @subjects
end
我能够以管理员身份创建主题,并且实际上阻止了非管理员访问索引。但我很困惑为什么这个测试会失败。我有这个政策规范设置就像其他人一样,他们正在通过。任何的想法?