2016-11-25 133 views
0

我在定製控制器定製會話控制器測試設計使用RSpec

class Users::SessionsController < Devise::SessionsController 
    # POST /resource/sign_in 
    def create 
    binding.pry 
    super 
    end 
end 

路線添加

devise_for :users, controllers: { sessions: "users/sessions" } 

,並使用瀏覽器登入時它的工作原理。但是控制器測試斷點內中創建沒有被擊中:

RSpec.describe Users::SessionsController, type: :controller do 

    describe 'POST #create' do 

    context 'pending activation user with expired password' do 
     it 'could not login' do 
     user = create :operator_user, status: User.statuses[:activation_pending], password_changed_at: (1.day + 1.second).ago 
     @request.env['devise.mapping'] = Devise.mappings[:user] 
     sign_in user 

     user.reload 
     expect(user).to be_locked 
     end 
    end 
    end 

end 

RSpec.configure do |config| 
    #... 
    # Devise methods 
    config.include Devise::TestHelpers, type: :controller 
    # ... 
end 

我希望表達 sign_in用戶 陷入創建我overrided方法。我究竟做錯了什麼?

PS:它甚至落入標準色器件SessionsController#create

回答

2

你必須使用你的post :create, params: {...}例如內,而不是sign_in user

發送請求到控制器