Rails 7控制器集成测试调用follow_redirect!后会话丢失求助
Rails 7控制器测试中
follow_redirect!后会话丢失的解决办法 1. 检查测试环境会话配置
确保config/environments/test.rb中的会话存储配置正确,避免因配置问题导致会话无法跨重定向保留:
Rails.application.configure do # 启用cookie存储会话(Rails默认配置,请勿禁用) config.session_store :cookie_store, key: '_your_app_session' # 确保cookie序列化方式正确,避免会话数据解析失败 config.action_dispatch.cookies_serializer = :json # 避免设置过短的会话过期时间,测试环境建议不设置或设为较长时长 end
2. 排查控制器代码逻辑
确认重定向的源Action和目标Action都没有意外清除会话数据:
- 检查是否调用了
reset_session、session.clear或session.delete(:yada)等清除会话的方法 - 验证重定向逻辑中没有修改或删除目标会话键
3. 测试中手动维护会话(临时 workaround)
如果配置和代码都无问题但会话仍丢失,可以在测试中手动传递会话Cookie:
post some_url, params: { yada: 'foo' } assert_not_nil session[:yada] assert_redirected_to some_redirect_url # 保存当前会话的Cookie值 session_cookie = cookies[Rails.application.config.session_options[:key]] follow_redirect! # 手动将会话Cookie设置回请求中 cookies[Rails.application.config.session_options[:key]] = session_cookie assert_not_nil session[:yada]
4. 验证测试驱动配置
确保测试使用rack_test驱动(Rails集成测试默认驱动),该驱动会自动处理跨重定向的会话共享。若自定义了测试驱动,需检查是否配置了会话持久化逻辑。
内容的提问来源于stack exchange,提问作者David Wolff
相关产品推荐
相关产品推荐

