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

执行Rails测试时遇302重定向错误,期望2XX成功响应

问题拆解与解决方案

嘿,这个问题我太熟悉了,咱们一步步来理清楚:

错误根源

你遇到的这个302重定向错误,本质是**OpeningsController的new接口被身份验证拦截了**。大概率是你的控制器里加了类似Devise的authenticate_user!这样的前置过滤器,要求用户必须登录才能访问这个页面。

测试代码里直接访问new_opening_url时,没有任何已登录的用户,系统就自动把请求重定向到登录页面(也就是你看到的/users/sign_in),但你的测试预期的是2XX成功响应,自然就触发报错了。

两种解决思路(按需选择)

思路一:如果new页面确实需要登录才能访问

那你得在测试里先创建一个测试用户,并且完成登录操作,再去访问接口。假设你用的是Devise,修改测试代码如下:

class OpeningsControllerTest < ActionDispatch::IntegrationTest
  setup do
    # 先创建一个合法的测试用户
    @user = User.create!(email: 'test_user@example.com', password: 'secure_password123')
    # 调用Devise的登录方法
    sign_in @user
  end

  test "should get new" do
    get new_opening_url
    assert_response :success
  end
end

提示:如果你的用户模型不是User,或者项目用了自定义的登录逻辑,记得对应调整创建用户和登录的代码哦。

思路二:如果new页面应该允许匿名访问

那你需要在OpeningsController里,给new action跳过身份验证检查。修改控制器代码:

class OpeningsController < ApplicationController
  # 除了new action,其他都需要登录验证
  before_action :authenticate_user!, except: [:new]
  # 或者反过来,只给特定action加验证:
  # before_action :authenticate_user!, only: [:create, :edit, :update, :destroy]

  def new
    # 你的业务逻辑代码
  end

  # 其他控制器方法...
end

验证修改

改完之后,重新运行测试命令:

RAILS_ENV=test rails test test/controllers

只要逻辑没问题,测试应该就能顺利通过啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:35:52