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

Rails 8内置认证下如何用Minitest测试已登录用户的控制器

Rails 8内置认证Minitest测试302重定向问题解决

使用Rails 8内置认证功能时,Minitest控制器测试出现302重定向到登录页,核心原因是测试中的登录操作未正确生效,以下是具体解决步骤:

1. 修正登录请求路由

Rails 8内置认证的登录提交接口是session_url(POST方法),new_session_url仅用于GET请求展示登录页面。修改你的sign_in方法:

def sign_in(user)
  post session_url, params: { user: { email_address: user.email_address, password: "password" } }
end

2. 确保参数嵌套结构正确

Rails内置认证默认将登录参数嵌套在user键下,若你修改过用户模型的登录字段为email_address,需同步在认证配置中指定:
在config/initializers/auth.rb添加或修改:

Rails.application.config.auth do |config|
  config.authentication_keys = [:email_address]
end

3. 跟进登录后的重定向

登录请求会返回302重定向,若不跟进重定向,后续请求无法携带登录session。更新setup方法:

setup do
  @category = categories(:one)
  @user = users(:one)
  sign_in @user
  follow_redirect! # 跟进重定向,保持登录状态
end

也可以添加断言验证登录成功:

setup do
  @category = categories(:one)
  @user = users(:one)
  sign_in @user
  assert_response :redirect # 确认登录请求返回重定向
  follow_redirect!
end

4. 验证Fixture密码有效性

确认fixture中的密码摘要与测试用密码匹配,可新增测试用例验证:

test "user fixture password is valid" do
  assert_equal "password", BCrypt::Password.new(users(:one).password_digest)
end

内容的提问来源于stack exchange,提问作者cyberfly

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 02:48:20