
لازمه یه توسعه مسئولیت پذیرانه، نوشتن تسته. تست کردن، اعتماد به نفس ما رو در مورد عملکرد مورد انتظار برنامهمون افزایش میده. توی این سری قصد داریم راجع به اصول نوشتن تست کارآمد و لایه های مختلفش صحبت کنیم.
تست کردن فقط برای پیدا کردن باگ نیست. بلکه تست نوشتن به ما کمک میکنه که کد بهتری بنویسیم. وقتی برای تست نوشتن پلن داریم، مجبوریم کدی بنویسیم که سازمانیافتهتر و قابلاستفادهتر باشد. این یه فرآیند دوطرفه است:
کد خوب <------------------> تست خوب
اعتماد به نفس: با تستهای جامع، جرئت تغییر و بهبود کد رو دارید
کیفیت کد: تستها به بهبود کیفیت کد و طراحی کمک میکنن
مستندسازی: تستها به عنوان مستندات اجرایی عمل میکنن
refactoring ایمن: با تستهای مناسب میتونید کد رو重构 کنید بدون ترس از شکستن ویژگیها
کاهش باگ: تستها به شناسایی و جلوگیری از باگها کمک میکنن
منحنی یادگیری: تست نویسی نیاز به تمرین و تجربه داره
زمان و هزینه: نوشتن تست زمان و هزینه داره، اما سرمایهگذاری ارزشمندیه
نگهداری تستها: با تغییر کد، تستها هم نیاز به به روز رسانی دارن
تعادل: باید تعادل بین نوشتن تست و توسعه ویژگیها برقرار کرد
ما در این سری، سه متد رایج تست رو بررسی خواهیم کرد:
تست واحد (unit test)
تست یکپارچگی (integration test)
تست نهایی (e2e test)
تست واحد، کوچکترین قسمت برنامهمون رو تست میکنه. یه تابع یا متد را به طور ایزوله بررسی میکنیم که انتظار داریم چطوری کار کنه. عموما این نوع تستها سریع و جمعوجور هستند.
تست یکپارچگی، چند تا از قسمت های برنامهمون رو با هم تست میکنه. مثلاً فرض کنید یه بخش از برنامه ما یه API صدا میزنه و نتیجه رو پردازش میکنه و یا چندتا هوک و کامپوننت react ای در یک کامپوننت رو شبیهسازی میکنیم تا از عملکردشون کنار هم مطمئن بشیم.
تست نهایی (end-to-end)، کل برنامه رو از دید کاربر نهایی تست میکنه. یعنی ما شبیهسازی میکنیم که کاربر چطور با برنامهمون تعامل داره. مثلاً کاربر روی دکمهای کلیک میکنه، فرم رو پر میکنه و نتیجه رو میبینه.
در این سری از ابزارهای شناختهشده، بهروز و پرکاربرد استفاده خواهیم کرد:
Vitest - یه گزینه مدرن و سریع برای تست unit و integration و جایگزین Jest
Testing Library - یه کتابخونه با کلی ابزار مفید برای تست DOM
JSDOM یا HappyDom - یه کتابخونه سریع برای شبیهسازی محیط DOM در node
Playwright - برای تست E2E
راجع به اینکه کدوم ابزار رو کی استفاده میکنیم در بخش های مربوطه توضیح میدیم.
آشنایی اولیه با javascript یا typescript
آشنایی با git, npm و node