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! просто работать из коробки

Другие вопросы по тегам