Помощник по тестированию sign_in от IntegrationHelper от Devise не использует пользовательский SessionController - PullRequest
0 голосов
/ 29 января 2020

Я обновляю Rails 4.2 до Rails 6, а Devise с 3.5 до 4.7. При этом мои тесты больше не вызывают мой пользовательский SessionController, а напрямую вызывают Devise's SessionController. В результате мои after_action обратные вызовы больше не вызывают в моих тестах.

В частности, у меня есть собственный контроллер. Например:

# session_controller.rb
class SessionsController < Devise::SessionsController
  clear_respond_to
  respond_to :json

  after_action :set_last_login_cookie, only: %i[create new]
  after_action :destroy_last_login_cookie, only: [:destroy]

  private

  # sets the last login cookie
  def set_last_login_cookie
    byebug # NOT BEING CALLED
    cookies.permanent[:last_login] = DateTime.now unless cookies[:last_login]
  end

  # deletes the last login cookie
  def destroy_last_login_cookie
    cookies.delete :last_login
  end
end

В моем тесте SessionsController:

class SessionsControllerTest < ActionDispatch::IntegrationTest
  include Devise::Test::IntegrationHelpers
  test 'should set login cookie on sign_in and call debugger' do
    sign_in(u)
    ...
  end
end
# routes.rb
Rails.application.routes.draw do
  devise_scope :user do
    post   '/users/sign_in',  to: 'sessions#create',      as: :user_session
  end
end

В Rails 4.2 мой SessionControllerTest наследовал от ActionController::TestCase и установки @request.env['devise.mapping'] = Devise.mappings[:user] в методе настройки. Это работало отлично, но теперь и перерывы.

Любая помощь будет отличной :)

...