简体   繁体   English

使用RSpec测试设计自定义会话控制器

[英]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: 但是在create内部的控制器测试断点没有被击中:

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. 我希望表达式sign_in用户属于我已覆盖的create方法。 What am I doing wrong? 我究竟做错了什么?

ps: it even falls into standard devise SessionsController#create ps:它甚至属于标准设计SessionsController#create

您必须通过在示例中使用post :create, params: {...}而不是sign_in user来向控制器发送请求

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM