【问题标题】:Rake::TestTask Rails 5 Uninitialize ConstantRake::TestTask Rails 5 取消初始化常量
【发布时间】:2017-11-29 18:56:16
【问题描述】:

我正在尝试将我的测试分解为多个测试任务:

Rails.configuration.use_database_cleaner = true

  namespace :test do
    Rails::TestTask.new(api: "test:prepare") do |t|
    t.pattern = 'test/api/**/*_test.rb'
  end

  task :jasmine_ci_in_another_process do
    if !system("./bin/rake jasmine:ci") 
      fail
    end
  end

  task :capybara_in_another_process do
    if !system("./bin/rake test:capybara")
      fail
    end
  end

  Rails::TestTask.new(capybara: [:prepare]) do |t|
    t.pattern = 'test/**/capybara/*_test.rb'
  end

  Rails::TestTask.new(unit: [:prepare]) do |t|
    t.test_files = FileList['test/**/*_test.rb'].exclude(
      'test/firebase/**/*_test.rb',
      'test/**/capybara/*_test.rb'
    )
  end

  task :ci => [:prepare, :jasmine_ci_in_another_process, :unit, :capybara_in_another_process]
 end

if !ENV['SKIP_JASMINE'] && ENV['TEST'].blank?
  Rake::Task[:test].enhance ['test:api', 'test:jasmine_ci_in_another_process']
end

每当我运行 rake 任务时,无论是 rake test 还是 rake test:unit 等。我都会收到一条错误消息,说明如下: “NameError:未初始化的常量 Rails::TestTask”。如果我只有一个 Rails::TestTask.new 声明,一切似乎都很好,但我的测试结果显示我希望它们成为。

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    您需要将 Rails::TestTask 替换为 Rails::TestUnit::Runner。

    我认为你的这个测试,例如:

    Rails::TestTask.new(capybara: [:prepare]) do |t|
        t.pattern = 'test/**/capybara/*_test.rb'
    end
    

    在 Rails 5.1 中可以这样写:

    require "rails/test_unit/runner"
    
    namespace :test do
      task :capybara => "test:prepare" do
        $: << "test"
        test_files = FileList['test/**/capybara/*_test.rb']
        Rails::TestUnit::Runner.run(test_files)
      end
    end
    

    在 Rails 5.1.6 中测试

    感谢 jonatack 2015 年 5 月的帖子:https://github.com/rails/rails/issues/19997

    【讨论】:

      【解决方案2】:

      只需添加到 Anatortoise House 答案 - 对于 Rails 6。 这也包括排除文件。

      # lib/tasks/test.rake
      Rake::Task["test:system"].clear
      
      namespace :test do
        desc "Run all system tests except test/serial folder"
        task system: "test:prepare" do
          $: << "test"
          test_files = FileList["test/system/**/*_test.rb"].exclude(
            "test/system/serial/**/*_test.rb"
          )
          Rails::TestUnit::Runner.run(test_files)
        end
      
        desc "Run all serial test folder"
        task serial: "test:prepare" do
          $: << "test"
          test_files = FileList["test/system/serial/*_test.rb"]
          Rails::TestUnit::Runner.run(test_files)
        end
      end
      

      【讨论】:

        猜你喜欢
        • 2020-11-27
        • 2017-07-10
        • 2016-10-29
        • 2011-08-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-05
        相关资源
        最近更新 更多