Test در مسیر Ruby

یاد بگیرید چگونه تمرین‌های Ruby خود را در Exercism Test کنید.


اجرای testها

testها را با این دستور اجرا کنید:

$ ruby hamming_test.rb

فقط اولین test اجرا می‌شود؛ بقیه با استفاده از متد skip در حالت معلق قرار گرفته‌اند. هر بار که یک test را پاس می‌کنید، skip بعدی را حذف کنید یا آن را کامنت کنید.

درک skipها

متد skip به مجموعه‌ی testها می‌گوید که یک test را اجرا نکند. این کار معمولاً برای پرهیز از اجرای testهای مربوط به قابلیت‌هایی است که هنوز پیاده‌سازی نشده‌اند، تا بتوانید روی بخشی که همین حالا روی آن کار می‌کنید تمرکز کنید.

خلاصه‌ی اجرای testها نشان می‌دهد چند test نادیده گرفته شده است. پیش از کامل کردن یک تمرین، بهتر است همه‌ی skipها را غیرفعال کنید.

سفارشی‌سازی گزارش testها

اگر رنگ می‌خواهید، testها را با این دستور اجرا کنید:

$ ruby hamming_test.rb -p

اگر می‌خواهید اسم‌های testها را ببینید، testها را با این دستور اجرا کنید:

$ ruby hamming_tests.rb -v

اگر می‌خواهید فقط یک test را اجرا کنید، می‌توانید یک test یا گروهی از آن‌ها را با تطبیق به سبک «عبارت باقاعده» مشخص کنید.

$ ruby hamming_tests.rb -n /empty/

می‌توانید این گزینه‌ها را با هم ترکیب کنید.

غیرفعال کردن همه‌ی skipها

حالا که با این امکان تازه می‌توانید testهای دلخواهتان را به‌صورت تک یا گروهی انتخاب کنید، شاید بخواهید همه‌ی skipها را غیرفعال کنید.

روش سریع و بی‌دردسر

با استفاده از این واقعیت که در Ruby می‌توان متدها را بازنویسی کرد، اگر این خط را اضافه کنید؛

def skip ; end

مثل این، در فایل test مربوط به Hamming:

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

آن‌وقت همه‌ی skipها همچنان ارزیابی می‌شوند، اما اجازه می‌دهند testهای شما اجرا شوند.

همان راه سریع، اما تمیزتر

البته، ویرایش همه‌ی فایل‌ها به‌مرور زمان می‌تواند آزاردهنده باشد، پس می‌توانید همان کاری را بکنید که ما هنگام توسعه‌ی تمرین‌ها کردیم: فایلی بسازید که تعریف skip در آن باشد و هر وقت که خواستیم، آن را به‌عنوان کتابخانه require کنیم.

ما یک پوشه‌ی 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

روش استفاده از آن به‌صورت کامنت در همان فایل توضیح داده شده است؛ این فایل هم به‌طور کامل آمده است.