【问题标题】:Rails::TestUnit::Runner.run NameError: uninitialized constantRails::TestUnit::Runner.run NameError: 未初始化的常量
【发布时间】:2022-08-04 22:11:03
【问题描述】:

在 Rails 6 (6.1.4.1) 上,我们有一个 RakeFile 可以运行一部分测试。例如:

# lib/tasks/carrier.rake
namespace :test do
  task carriers: \"test:prepare\" do
    $: << \"test\"
    test_files =  FileList[\"test/models/carrier_test.rb\",
                           \"test/controllers/admin/carriers/**/*_test.rb\",
                           \"test/system/admin/carriers/**/*_test.rb\"]
    Rails::TestUnit::Runner.run(test_files)
  end
end

这将在调用时执行得很好:

rails test:carriers

但是,在此过程中,发生了一些变化,我们在尝试运行 RakeFile 测试任务时开始看到错误。 (我还没有确切地追踪到发生了什么变化以及何时发生变化——也许它是 Rails 7 版本的一部分。)这是我们开始看到的错误:

rails aborted!
NameError: uninitialized constant Shoulda

Shoulda::Matchers.configure do |config|
^^^^^^^
/path/test/test_helper.rb:15:in `<main>\'
/path/test/models/carrier_test.rb:1:in `<main>\'
/path/lib/tasks/carriers.rake:11:in `block (2 levels) in <main>\'
Tasks: TOP => test:carriers
(See full trace by running task with --trace)

该错误出现了,但我们的测试或环境配置没有任何更改。 (运行完整的rake 效果很好。)

    标签: ruby-on-rails rake-task rakefile


    【解决方案1】:

    在查看Rails::TestUnit::Runner 的源代码时,我遇到了rake_run。只需将 Rails::TestUnit::Runner.run 替换为 Rails::TestUnit::Runner.rake_run 即可解决问题(无需其他更改):

    # lib/tasks/carrier.rake
    namespace :test do
      task carriers: "test:prepare" do
        $: << "test"
        test_files =  FileList["test/models/carrier_test.rb",
                               "test/controllers/admin/carriers/**/*_test.rb",
                               "test/system/admin/carriers/**/*_test.rb"]
        Rails::TestUnit::Runner.rake_run(test_files)
      end
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-15
      • 2017-07-10
      • 2022-01-01
      • 2016-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多