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

Rails 6不使用RSpec时Devise测试助手报错如何解决?

跳转http://www.example.com的原因说明

这是Rails集成测试环境的默认模拟域名,属于测试框架的预设正常行为,不是代码故障,无需额外修改配置。

sign_in生效失败(仍跳转登录页)的排查方案

1. 确认User模型是否启用confirmable模块

如果你的app/models/user.rb中Devise配置包含:confirmable字段,用户需要完成邮箱验证才能正常登录,当前fixture未设置验证标记,导致用户处于未激活状态,登录不会生效。
修复方案:修改user fixture,添加confirmed_at字段:

valid_user:
  first_name: "Toseef"
  last_name: "zafar"
  email: "exampleuser@gmail.com"
  encrypted_password: <%= Devise::Encryptor.digest(User, '12345678') %>
  confirmed_at: <%= Time.current %>

2. 修正Devise测试助手的引入位置

部分Rails 6版本中,Devise::Test::IntegrationHelpers需要单独挂载到集成测试基类才会生效,修改test/test_helper.rb如下:

ENV['RAILS_ENV'] ||= 'test'
require_relative "../config/environment"
require "rails/test_help"

class ActiveSupport::TestCase
  parallelize(workers: :number_of_processors)
  fixtures :all
end

class ActionDispatch::IntegrationTest
  include Devise::Test::IntegrationHelpers
end

3. 调试验证登录状态

可以在测试代码中添加临时调试语句,确认登录状态是否正常:

test "should be able to get to new form page" do
  sign_in users(:valid_user)
  # 运行测试时查看控制台输出,确认是否返回true
  p "登录状态:#{signed_in?}"
  get new_vehicles_url
  assert_response :success
end

如果以上操作都无效,可以进一步检查User模型是否存在自定义的登录拦截逻辑,或者authenticate_user!方法是否被重写。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 15:06:00