Andrey Khataev
Andrey Khataev

Reputation: 1343

Testing devise custom session controller with rspec

I'm having custom controller

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

routes added

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

and it works during signin using browser. But inside controller test breakpoint inside create is not being hit:

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

I expect expression sign_in user to fall into create method that I've overrided. What am I doing wrong?

ps: it even falls into standard devise SessionsController#create

Upvotes: 1

Views: 936

Answers (1)

Paweł Dąbrowski
Paweł Dąbrowski

Reputation: 754

You have to send request to controller by using post :create, params: {...} inside your example instead of sign_in user

Upvotes: 4

Related Questions