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