autotest

Если вы пишете для своего кода на Ruby тесты либо спеки, то вам непременно пригодится autotest из гема ZenTest. Эта утилита запускается из корня проекта и следит за изменениями в тестах/спеках. Если таковые имеются, то она запускает только эти измененные файлы. За счет этого достигается скорость тестирования (прогонять переиодически кучу тестов — не быстрое занятие), и мы всегда знаем, когда у нас что-то сломалось.

Для этой утилиты существует плагин RedGreen, который подсвечивает зеленым или красным результаты прогона тестов, дабы одного взгляда хватило, чтобы увидеть ситуацию. Однако этот плагин не работает при тестирвоании спек, так как у них отличается формат вывода сообщения об ошибках. Если поместить следующий код в файл .autotest в вашем корневом каталоге или в каталоге с проектом, откуда запускаем тесты, то все будет работать как хочется.


  module Autotest::RedGreen
    BAR = "=" * 80

    Autotest.add_hook :ran_command do |at|
      # was     if at.results.last =~ /^.* (\d+) failures, (\d+) errors$/
      # changed because if we have pendings, output will look like "5 examples, 1 failure, 2 pending"
      # and this condition will not work
      if at.results.last =~ /^.* ((\d+) failures?|(\d+) errors?)/
        code = ($2 != "0" or (not $3.nil? && $3 != "0")) ? 31 : 32
        puts "\e[#{code}m#{BAR}\e[0m\n\n"
      end
    end
  end

About this entry