我尝试登录我的管理员以测试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
答案 0 :(得分:0)
发现问题似乎是因为我这样做了
admin.confirmed_at = Time.now
我只使用
admin.confirm!
明显无法开箱即用