2015-09-17 2 views
0

Вы не можете ничего сделать в моем приложении Rails (кроме попадания на целевую страницу) без входа. Я потратил много времени на получение аутентификации до work (придумайте спецификации моего контроллера и Warden в моих спецификациях) ,Должен ли я включать проверку подлинности в мои тесты rspec?

Я иду по правому пути? Это кажется неправильным, поскольку я хочу сам тестировать свои контроллеры ... не обязательно повторять проверку подлинности снова и снова (кроме явно проверки подлинности в моем User-контроллере).

Каковы наилучшие методы? Вы явно проверяете подлинность повсюду или каким-то образом подделываете auth и фокусируетесь на своих индивидуальных спецификациях контроллера/функций без аутентификации?

ответ

1

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

Именно поэтому Devise предоставляет свои собственные test helpers для контрольных контроллеров. Вам не нужно каждый раз проверять свой код авторизации, вам просто нужен помощник, который разрешит пользователю в ваших тестах.

Минимальная установка:

rails_helper.rb

require 'spec_helper' 
require 'rspec/rails' 
# note: require 'devise' after require 'rspec/rails' 
require 'devise' 

RSpec.configure do |config| 
    config.include Devise::TestHelpers, :type => :controller 
end 

Затем в контроллере спецификации:

# in case you use FactoryGirl, if you don't, just create your models as you like 
let(:current_user) { FactoryGirl.create(:user) } 
before do 
    # this line is needed for testing Devise controllers 
    @request.env["devise.mapping"] = Devise.mappings[:user] 
    sign_in current_user 
end 
Смежные вопросы