Я обновляю 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]
в методе настройки. Это работало отлично, но теперь и перерывы.
Любая помощь будет отличной :)