Тестування на треку Ruby

Як тестувати власні вправи з Ruby на Exercism


Запуск тестів

Виконати тести можна так:

$ ruby hamming_test.rb

Виконається лише перший тест, усі інші позначено як відкладені за допомогою методу skip. Видаліть або закоментуйте наступний skip у міру того, як проходитиме кожен тест.

Як працюють пропуски

Метод skip вказує набору тестів не запускати тест. Його зазвичай використовують, щоб не запускати тести ще не реалізованої функціональності та зосередитися на тій частині, над якою ми працюємо зараз.

У підсумку запуску тестів буде вказано кількість пропущених тестів. Перш ніж завершити вправу, варто вимкнути всі пропуски.

Налаштування звітів про тести

Якщо потрібен кольоровий вивід, запустімо тести так:

$ ruby hamming_test.rb -p

Якщо потрібно побачити назви тестів, запустімо тести так:

$ ruby hamming_tests.rb -v

Якщо потрібно запустити лише один тест, можна вказати один тест або групу за допомогою зіставлення в стилі регулярних виразів.

$ ruby hamming_tests.rb -n /empty/

Параметри також можна поєднувати.

Вимкнення всіх пропусків

Тепер, коли ми вміємо вибирати окремі тести або групи тестів для запуску, може виникнути бажання вимкнути всі пропуски.

Швидкий і брудний спосіб

Скориставшись тим, що в Ruby методи можна перевизначати, можна додати такий рядок коду:

def skip ; end

ось так, у файлі тестів Hamming:

class HammingTest < Minitest::Test
  def skip ; end
  def test_identical_strands

тоді всі пропуски все одно спрацюють, але дадуть тестам виконатися.

Так само швидкий, але чистіший спосіб

Звісно, щоразу редагувати всі файли може бути втомливо, тож можна зробити так, як робили ми, розробляючи вправи... створити файл з означенням skip і підключати його як бібліотеку, коли це потрібно.

Ми створили теку lib, щоб тримати там наші «допоміжні» речі, і має вона такий вигляд:

require 'minitest/autorun'
# You can use this to disable all skips in the current exercise by issuing the
# following command:
#     ruby -I../lib -rdisable_skip <filename_test.rb>

module Minitest
  class Test
    def skip(_msg='', _bt=caller)
    end
  end
end

Опис того, як цим користуватися, закоментовано в тому лістингу файлу, і цей лістинг наведено повністю.