2016-11-25 4 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 пользователь впасть в создании метода, который я перекрытая. Что я делаю не так?

пс: он даже попадает в стандартный завещанию SessionsController#create

ответ

2

Вы должны отправить запрос на контроллер с помощью post :create, params: {...} в вашем примере вместо sign_in user

Смежные вопросы