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

Ruby测试调用Struct定义的模块常量报NameError未初始化常量问题排查

报错原因及解决方案

这个NameError: uninitialized constant CoreDomain::Corporation报错的本质是Rails运行测试时没有成功加载到你定义的Struct常量,常见原因和修复方案如下:

  • 不符合自动加载规则
    Rails 6及以上版本默认使用Zeitwerk自动加载器,要求文件名和常量名严格对应:
    • 定义CoreDomain::Corporation的代码必须命名为corporation.rb,且放在名为core_domain的目录下
    • 存放core_domain的父目录必须被加入Rails自动加载路径。默认自动加载路径包含app/models、app/services等目录,如果你把代码放在了lib目录下,需要在config/application.rb中添加配置:
    config.autoload_paths << Rails.root.join("lib")
    
  • 未显式引入对应文件
    如果不想调整自动加载配置,可以在测试文件的require 'test_helper'之后手动引入Struct定义的文件,比如你的代码存放在lib/core_domain/corporation.rb,就添加一行:
require "core_domain/corporation"
  • 命名拼写错误
    检查模块名、Struct常量名的拼写和大小写是否完全一致,有没有出现Core_domain、corporation这类不符合驼峰命名规则的写法。

小优化提示:你的测试类已经定义在CoreDomain模块内部,调用时不需要再加CoreDomain::前缀,直接写Corporation.new即可,不过这不是本次报错的原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 04:09:04