Как проверить действие контроллера (например, показать) для авторизованного пользователя, когда приложение использует Pundit для авторизации.Проверка действия контроллера уполномоченным пользователем при использовании Pundit
Информация:
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 в plan_policy_test.rb. Несколько вариантов Я пробовал:
Настройка авторизации на true в тесте контроллера.
Пропуск авторизации в контрольном тесте.
Решения, которые я нашел, либо используют RSpec (в то время как я использую Minitest с приборами), либо Mocha, либо углубляйтесь в детали тестирования политик Pundit, но не объясняйте действия контроллера, требующие авторизованного пользователя.
Я ищу простой способ пропустить (или подделку) авторизацию в тестах без использования драгоценных камней или других наборов тестов, чем Minitest. Я пробовал обдумать это в течение двух дней, поэтому помощь будет принята с благодарностью!
кстати: У меня еще есть чему поучиться в отношении разработки Rails, так что извиняйтесь, если я задаю неправильные вопросы или если я даю неправильную информацию.
По какой-то причине я получаю неизвестную ошибку метода при попытке выше. Не имея возможности найти решение, я установил камень Mocha и использовал 'policy = stub (create ?: true); PlanPolicy.stubs (: new) .returns (policy) 'Необходимость драгоценного камня, чтобы быть в состоянии заглушить Политики Pundit - это не мой первый выбор, но сейчас это нужно будет сделать. – domtiedom