Rspec Devise Войти
Я пытаюсь войти в свой админ, чтобы проверить спецификации контроллера в rspec
Я сделал все возможное, чтобы следовать указаниям здесь, но кажется, что я что-то пропустил, из-за чего admin
все еще не может войти в систему, что приводит к сбою спецификации моего контроллера
Вот мой код
## spec/spec_helper.rb
RSpec.configure do |config|
config.include Devise::TestHelpers, :type => :controller
config.extend ControllerMacros, :type => :controller
end
## spec/support/controller_macros.rb
module ControllerMacros
def login_admin
before(:each) do
@request.env['devise.mapping'] = Devise.mappings[:admin]
admin = Admin.create(first_name: 'Admin',
last_name: 'User',
email: 'admin@poaster.me',
password: 'admin1234',
password_confirmation: 'admin1234',
active: true
)
admin.confirmed_at = Time.now
admin.confirm!
sign_in admin
## Did an idependent test over here using binding.pry not sure why
# binding.pry
# session => {"warden.user.admin.key"=>[[27], "$2a$04$6KicZPZUvYxOBiMadVyIqe"]}
# request['env'].warden.user => nil
# request['env'].warden.authenticated? => false
end
end
end
Вывод, который видят в session
внутри моей спецификации контроллера
{"flash"=>
#<ActionDispatch::Flash::FlashHash:0x007f9bee570738
@closed=false,
@flashes={:alert=>"You have to confirm your account before continuing."},
@now=nil,
@used=#<Set: {}>>}
Спецификация контроллера
## spec/controllers/users_controller_spec.rb
login_admin
describe UsersController do
context 'GET users/index' do
it 'render users index pages' do
get :index
#binding.pry
#session => {"flash"=> #<ActionDispatch::Flash::FlashHash:0x007f9bee570738 @closed=false,@flashes={:alert=>"You have to confirm your account before continuing."},@now=nil,@used=#<Set: {}>>}
expect(response).to render_template('index')
end
end
end
Код контроллера
## app/controllers/users_controller.rb
class UsersController < ApplicationController
before_filter :authenticate_admin!
before_filter :require_admin?, :only => [:deactivate, :activate, :index]
def index
page = params[:page] || 1
@users = User.includes(:company).where(roles_mask: 1) params[:page])
@users = @users.page(page).per(10)
end
end
1 ответ
Нашел, кажется, проблема была в том, что я делал это
admin.confirmed_at = Time.now
Я использую только
admin.confirm!
просто работать из коробки