Rake-задачи do нуждаются в тестировании, особенно если вы выполняете в нем некоторую пакетную обработку. Тестировать их довольно легко в наши дни:
class CleanExamsTaskTest < ActiveSupport::TestCase
def test_deletes_results_of_old_exams
travel_to Time.zone.parse('2010-07-05 10:00')
@exam.update!(end: Time.zone.parse('2010-07-04 09:59'))
assert_difference -> { @exam.answered_questions.count }, -1 do
capture_io { run_task }
end
end
def test_output
travel_to Time.zone.parse('2010-07-05 10:00')
@exam.update!(end: Time.zone.parse('2010-07-04 09:59'))
assert_output("Exams processed: 1\n") { run_task }
end
private
def run_task
Rake::Task['exams:clean'].execute
end
end
Полный пример
Протестировано с Ruby> = 1.9 и Rails 5.2. Использует Minitest
из stdlib
. Других зависимостей нет.