Rake 测试任务的顺序

Order of Rake Test Task

我有一个包含三个任务的 rake 文件,我需要按顺序执行。

require 'rake/testtask'

file 'some_binary_file.elf' do
    puts 'fetching file from server ...'
    # this task connects to a server and downloads some binaries
    # it takes a few seconds to run
end

task flash_application: 'some_binary_file.elf' do
    puts 'flashing the file to the hardware ...'
    # this task copies a binary file to the flash memory
    # of some external hardware, also takes a few seconds
end

Rake::TestTask(:hardware) do |t|
   puts 'running tests ...'
   f.test_files = FileList['test/**/*_test.rb']
end

rake default: [:flash_application, :hardware]

当我在终端中 运行 $ rake 时,它会产生以下输出。

running tests ...                    < ---- (not actually running)
fetching file from server ...
flashing the file to the hardware ...

我希望 rake 运行 按照我指定的顺序执行任务,但它似乎总是先执行测试任务。值得注意的是,测试没有 运行 - 但无论如何都会生成任务创建的输出。

当您想要运行 任务按特定顺序执行时,您必须将它们相互依赖。在你的情况下, :flash_application 应该依赖于 :hardware

发现错误 - 这个问题不是 ruby / rake 特有的。 flash_application 任务更改工作目录。因此,当前工作目录中没有带有任务 'hardware' 的 Rakefile。但是研究这个错误产生了一些有趣的见解。

  • Ruby 数组是有序的,如果要按顺序执行任务,只需在数组中按执行顺序定义它们即可,即

    task some_task: [:first, :second, :third]

  • Rake::TestTask.new 在调用时定义了一个普通的旧 rake 任务。这意味着,当调用 rake 时,ruby 创建一个 Rake::TestTask 的实例。在此阶段执行/生成传递给构造函数的所有代码。这会产生原始问题中描述的行为。