2016-05-02 7 views
0

У меня есть файл рейка с тремя задачами, которые мне нужно выполнить в порядке.Order of Rake Test Task

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 ... 

я ожидал бы грабли для запуска задач в порядке я указал, но это, кажется, всегда выполнить тестовое задание первым. Замечательно, что тесты не выполняются, но результат создания задачи все равно создается.

+0

Будет ли решение, которое просто запускает другие в правильном порядке, является приемлемым решением? – tadman

+0

Пробовал, кажется, не работает. Кажется, что тестовая задача не вызвана. –

ответ

1

Обнаружена ошибка - эта проблема не была специфичной для рубинов/грабли. Задача flash_application изменяет рабочий каталог. Из-за этого в текущем рабочем каталоге нет Rakefile с аппаратным обеспечением задачи. Но исследование этой ошибки дало некоторые интересные идеи.

  • Рубина массивы упорядочены, если один хотят, чтобы выполнить задачу в порядке, достаточно, чтобы определить их в порядке выполнения в массиве т.е.

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

  • Rake::TestTask.new определяет простые старые грабли задача при вызове. Это означает, что когда вызывается грабли, ruby ​​создает экземпляр Rake :: TestTask. Весь код, переданный в конструктор, выполняется на данной стадии. Это дает описанное поведение из исходного вопроса.

2

Если вы хотите запускать задачи в определенном порядке, вы должны зависеть от них друг от друга. В вашем случае: flash_application следует зависеть от: аппаратного обеспечения

+0

Я также хочу, чтобы иметь возможность запускать тесты, не запуская выборку и мигание, так как эти два занимают некоторое время. Это было бы невозможно, если бы я зависел друг от друга, верно? –

+0

Нет, если задача не создает какой-то артефакт. Либо у вас есть две задачи, на которых выполняются тесты без предиката, а на тех, которые запускают тесты после выполнения предикатов. Или вы реализуете какой-то кеш для длительных задач. –

 Смежные вопросы

  • Нет связанных вопросов^_^