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
相关产品推荐
相关产品推荐

