1

我试图登录我的管理员以便在 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
4

1 回答 1

0

发现问题似乎是因为我正在这样做

admin.confirmed_at = Time.now

我只使用

admin.confirm!开箱即用

于 2014-06-24T12:07:19.703 回答