使用Pundit时由授权用户测试控制器操作

时间:2016-01-19 23:08:32

标签: ruby-on-rails-4 minitest pundit

当应用程序使用Pundit进行授权时,如何为授权用户测试控制器操作(例如show)。

的信息:

class PlansController < ApplicationController

  before_action :authenticate_user!


  def show
    @plan = Plan.find(params[:id])
    authorize @plan
  end
  .
  .
end

class PlanPolicy < ApplicationPolicy

  def show?
    record.users.include? user
     end

    end

require 'test_helper'

class PlansControllerTest < ActionController::TestCase

test 'When user is authorized should get show' do
    @plan = @planone
    sign_in @userdom
    # what do I put here?
    get :show, id: @plan
    assert_response :success
    assert_select "title", "Show plan | Plennel"
  end
end

我已经在plan_policy_test.rb中测试了plan_policy。 我尝试过的一些选项是:

在控制器测试中将authorize设置为true。

在控制器测试中跳过授权。

我发现的解决方案要么使用RSpec(我使用Minitest和灯具),要么在测试Pundit政策时详细说明,但不解释需要授权用户的测试控制器操作

我正在寻找一种在不使用Geite或其他测试套件而不使用Minitest的测试中跳过(或伪造)授权的简单方法。我一直试图让我的头围绕这两天,所以非常感谢帮助!

顺便说一句:关于Rails的开发,我还有很多东西需要学习,所以如果我提出错误的问题或者我是否提供了错误的信息,我会道歉。

1 个答案:

答案 0 :(得分:1)

authorize调用show?内的PlanPolicy方法。你只需要将其存根以返回true。

要在纯Ruby中执行此操作,您可以在规范的开头添加类似的内容。

class PlanPolicy
  def show? ; true ; end
end

我不熟悉Minitest,但它也应该支持存根。