【问题标题】:How do you use multiple tasks using Rake::TestTask?如何使用 Rake::TestTask 使用多个任务?
【发布时间】:2015-07-11 06:07:34
【问题描述】:

我正在使用 Rake 运行 Minitest,并希望有两个单独的 Rake 任务。

我添加了以下内容:

require 'rake/testtask'

task :default => [:test]
task :quick => [:unit]

Rake::TestTask.new do |t|
  puts 'within test task'
  t.libs.push 'specs'
  t.pattern = 'specs/*_spec.rb'
  ENV['STACK'] = 'stack1'
  puts "test stack #{ENV['STACK']}"
end


Rake::TestTask.new('unit') do |t|
  puts 'within unit task'
  t.libs.push 'specs'
  t.pattern = 'specs/*_unit.rb'
  ENV['STACK'] = 'stack2'
  puts "test stack #{ENV['STACK']}"
end

当我运行 bundle exec rake quick 时,我会得到以下输出:

within test task
test stack stack1
within unit task
test stack stack2

我没想到这两个任务都会运行。如何创建和运行两个单独的 rake 任务?就像现在一样,第二个总是覆盖环境变量。

谢谢

【问题讨论】:

    标签: ruby testing rake minitest rake-task


    【解决方案1】:

    您可以像这样使用Rake::Task["task_name"].clear 来解决这个问题:

    task :test_task do
      Rake::TestTask.new do |t|
        puts 'within test task'
        t.libs.push 'specs'
        t.pattern = 'specs/*_spec.rb'
        ENV['STACK'] = 'stack1'
        puts "test stack #{ENV['STACK']}"
      end
    end
    
    task :unit_task do
      Rake::TestTask.new('unit') do |t|
        puts 'within unit task'
        t.libs.push 'specs'
        t.pattern = 'specs/*_unit.rb'
        ENV['STACK'] = 'stack2'
        puts "test stack #{ENV['STACK']}"
      end
    
    end
    
    task :test do
      Rake::Task["unit_task"].clear
      Rake::Task["test_task"].invoke
    end
    
    task :unit do
      Rake::Task["test_task"].clear
      Rake::Task["unit_task"].invoke
    end
    

    【讨论】:

    • 谢谢。应该是Rake::Task["db:test_task"].clear 还是Rake::Task["test"].clear
    • 糟糕,在第一次编辑中,我刚刚使用namespace 进行了测试...我已经更新了答案。
    猜你喜欢
    • 2012-01-22
    • 2018-02-25
    • 1970-01-01
    • 2014-06-22
    • 2010-10-09
    • 2014-09-06
    • 1970-01-01
    • 1970-01-01
    • 2013-08-07
    相关资源
    最近更新 更多