当应用程序使用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的开发,我还有很多东西需要学习,所以如果我提出错误的问题或者我是否提供了错误的信息,我会道歉。答案 0 :(得分:1)
authorize
调用show?
内的PlanPolicy
方法。你只需要将其存根以返回true。
要在纯Ruby中执行此操作,您可以在规范的开头添加类似的内容。
class PlanPolicy
def show? ; true ; end
end
我不熟悉Minitest,但它也应该支持存根。