gpt4 book ai didi

ruby-on-rails-4 - 使用 Pundit 时授权用户测试 Controller 操作

转载 作者:行者123 更新时间:2023-12-02 03:18:40 28 4
gpt4 key购买 nike

当应用程序使用 Pundit 进行授权时,您如何为授权用户测试 Controller 操作(例如显示)。

信息:

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。我尝试过的一些选项是:

在 Controller 测试中将 authorize 设置为 true。

在 Controller 测试中跳过授权。

我找到的解决方案是使用 RSpec (当我将 Minitest 与固定装置一起使用时)或 Mocha 或详细介绍测试 Pundit 策略,但不解释需要授权用户的测试 Controller 操作。

我正在寻找一种简单的方法来跳过(或伪造)测试中的授权,而无需使用 Gems 或除 Minitest 之外的其他测试套件。两天来我一直在努力解决这个问题,所以非常感谢您的帮助!

顺便说一句:关于 Rails 开发,我还有很多东西要学,如果我问错了问题或提供了错误的信息,我深表歉意。

最佳答案

authorize 在后台调用 PlanPolicy 中的 show? 方法。您只需要 stub 即可返回 true。

要在普通的 Ruby 中做到这一点,您需要在规范的开头放置类似这样的内容。

class PlanPolicy
def show? ; true ; end
end

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

关于ruby-on-rails-4 - 使用 Pundit 时授权用户测试 Controller 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34888674/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com