测试使用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用户要属于我所覆盖的创建方法。我在做什么错?

ps:它甚至属于标准设计的SessionsController#create

您必须在示例中使用post :create, params: {...}而不是sign_in user

将请求发送到控制器

最新更新