You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 02:05:00