Rspec设计登录

时间:2014-06-23 10:52:03

标签: ruby-on-rails-3 rspec devise rspec-rails rspec3

我尝试登录我的管理员以测试rspec中的控制器规格

我尽力遵循here提及的说明,但似乎我错过了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 个答案:

答案 0 :(得分:0)

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

admin.confirmed_at = Time.now

我只使用

admin.confirm!明显无法开箱即用