2016-01-12 2 views
4

Я новичок в MiniTest. Большинство тестов легко понять, поскольку это код Ruby, а также читаемость в стиле Rspec. Однако у меня проблемы с аутентификацией. Как и в любом приложении, большинство контроллеров скрыты за какой-то аутентификацией, наиболее распространенным из которых является authenticate_user, чтобы гарантировать, что пользователь выполнил вход.MiniTest Authentication

Как я могу проверить session -> пользователь вошел в систему? Я использую аутентификацию с нуля, а не разрабатываю.

У меня есть это в качестве ссылки: https://github.com/chriskottom/minitest_cookbook_source/blob/master/minishop/test/support/session_helpers.rb

Но не совсем уверен, как это осуществить.

Давайте использовать это в качестве примера контроллера:

class ProductsController < ApplicationController 
    before_action :authenticate_user 

    def index 
    @products = Product.all 
    end 

    def show 
    @product = Product.find(params[:id]) 
    end 

end 

Как бы мой тест взгляд в этих основных случаях?

test "it should GET products index" do 
    # insert code to check authenticate_user 
    get :index 
    assert_response :success 
end 

test "it should GET products show" do 
    # insert code to check authenticate_user 
    get :show 
    assert_response :success 
end 

#refactor so logged in only has to be defined once across controllers. 

ответ

1

Вы используете свои собственные методы проверки подлинности? Если так что вы можете передать необходимые переменные сессии в качестве третьих паров запросить метод:

get(:show, {'id' => "12"}, {'user_id' => 5}) 

http://guides.rubyonrails.org/testing.html#functional-tests-for-your-controllers

В противном случае, если вы используете любую библиотеку аутентификации обычно предоставляют некоторые вспомогательные методы для тестирования.

+0

Что относительно индексных страниц? – miler350

+0

Я не вижу никакой разницы 'get (: index, {}, {'user_id' => 5})' – Oleg

2

Вам необходимо включить помощники тестовых программ, а затем вы можете использовать помощники-утилиты, как в контроллере.

т.е:

require 'test_helper' 

class ProtectedControllerTest < ActionController::TestCase 
    include Devise::TestHelpers 

    test "authenticated user should get index" do 
    sign_in users(:foo) 
    get :index 
    assert_response :success 
    end 

    test "not authenticated user should get redirect" do 
    get :index 
    assert_response :redirect 
    end 

end 

проверить Также из этого:
How To: Test controllers with Rails 3 and 4 (and RSpec)

+0

Я не использую устройство. Извините, забыл указать, что в моем посте. – miler350

+1

в рельсах 5 это 'include Devise :: Test :: IntegrationHelpers' – thedanotto