未定义的方法索引? Rails中的专家测试

时间:2018-04-05 03:01:10

标签: ruby-on-rails rspec pundit

我正在使用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

我能够以管理员身份创建主题,并且实际上阻止了非管理员访问索引。但我很困惑为什么这个测试会失败。我有这个政策规范设置就像其他人一样,他们正在通过。任何的想法?

0 个答案:

没有答案