Rails中app/lib目录PORO自动化测试及minitest配置问题
在Rails中配置app/lib的自动加载与测试运行
一、将app/lib纳入应用自动加载机制
Rails默认不会自动加载app/lib目录,需手动配置加载路径并遵循命名约定:
修改应用配置文件
在config/application.rb的Application类中添加以下配置,把app/lib加入自动加载和预加载路径:class Application < Rails::Application # 其他配置... config.autoload_paths << Rails.root.join('app/lib') config.eager_load_paths << Rails.root.join('app/lib') end遵循Rails命名约定
- 单文件类:
app/lib/my_service.rb对应类名MyService(蛇形文件名对应驼峰类名) - 命名空间类:
app/lib/utils/calculator.rb对应类名Utils::Calculator(目录结构对应命名空间)
Rails 7+ 使用Zeitwerk自动加载器,要求文件名与类名严格匹配,否则无法自动加载。
- 单文件类:
二、让rails test运行test/lib下的测试
只要遵循Minitest的命名规范,rails test会自动扫描并运行test/lib下的测试:
测试文件命名规范
确保test/lib下的测试文件以_test.rb结尾,比如my_service_test.rb(对应app/lib/my_service.rb的测试)。编写标准测试文件
测试文件需引入test_helper并继承Minitest::Test,示例:require 'test_helper' class MyServiceTest < Minitest::Test def test_basic_functionality # 测试逻辑 service = MyService.new assert_equal 'expected', service.do_something end end运行测试
- 直接执行
rails test,会自动包含test/lib下所有符合规范的测试文件 - 若只想单独运行
test/lib的测试,执行rails test test/lib
- 直接执行
内容的提问来源于stack exchange,提问作者pitosalas
相关产品推荐
相关产品推荐

