2016-01-19 2 views
3

Как проверить действие контроллера (например, показать) для авторизованного пользователя, когда приложение использует 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, так что извиняйтесь, если я задаю неправильные вопросы или если я даю неправильную информацию.

ответ

1

authorize звонки show? метод в PlanPolicy под капотом. Вам просто нужно заглушить это, чтобы вернуть true.

Чтобы сделать это в обычном рубине, вы бы поставили что-то подобное в начале своей спецификации.

class PlanPolicy 
    def show? ; true ; end 
end 

Я не знаком с Minitest, но он также должен поддерживать stubbing.

+0

По какой-то причине я получаю неизвестную ошибку метода при попытке выше. Не имея возможности найти решение, я установил камень Mocha и использовал 'policy = stub (create ?: true); PlanPolicy.stubs (: new) .returns (policy) 'Необходимость драгоценного камня, чтобы быть в состоянии заглушить Политики Pundit - это не мой первый выбор, но сейчас это нужно будет сделать. – domtiedom

 Смежные вопросы

  • Нет связанных вопросов^_^