TSTyche: ابزار تستکردن خودِ تایپها تو TypeScript
خلاصهٔ کاملتر
TSTyche یه ابزار تست برای TypeScript هست، ولی با یه تفاوت مهم نسبت به ابزارهای معمول: بهجای اینکه رفتار کد یا مقدارهای زمان اجرا رو تست کنه، خودِ تایپها رو میسنجه. یعنی بررسی میکنه که سیستم تایپ TypeScript واقعاً همون چیزی رو نتیجه میگیره که تو انتظار داری. تو خود سایت اومده که نسخهٔ TSTyche 7.2 همین حالا در دسترسه.
این ابزار با یه مجموعه helper میاد که اگه قبلاً تست نوشته باشی کاملاً برات آشناست: describe()، test() و it() برای سازماندهی تستها، بهعلاوهٔ assertionهای سبک expect. پرچمهای حالت اجرا مثل .only، .skip و .todo هم پشتیبانی میشن، پس همون الگوهای آشنای تست اینجا هم هستن، فقط موضوع تست عوض شده.
بخش assertionها دو جور کار میکنن: میتونی هم تایپِ استنتاجشدهٔ یه عبارت رو چک کنی، هم مستقیماً یه تایپ رو بسنجی. این انعطاف باعث میشه هم تایپهای ساده و هم تایپهای پیچیدهٔ تعمیمی (generic) و mapped رو بشه راحت تست کرد.
این ابزار چند دسته matcher داره. matcherهای رابطهای کارشون مقایسهٔ تایپهاست: .toBe() چک میکنه که یه تایپ دقیقاً همون تایپ دیگهست، .toBeAssignableFrom() بررسی میکنه که تایپ از یه تایپ دیگه assignable هست، و .toBeAssignableTo() برعکسش رو چک میکنه.
دستهٔ دوم matcherهای توانایی (ability) هستن که رفتار قابلیتهای تایپ رو میسنجن. مثلاً .toAcceptProps() چک میکنه یه کامپوننت JSX پراپهای دادهشده رو قبول میکنه یا نه، .toBeCallableWith() بررسی میکنه یه تابع با آرگومانهای مشخص قابل صداکردنه، .toBeConstructableWith() همینو برای ساختن یه کلاس چک میکنه، .toBeInstantiableWith() برای instantiateکردن یه generic با آرگومانهای تایپ، و .toHaveProperty() هم چک میکنه یه تایپ پراپرتی مشخصی داره.
قلب TSTyche دستور tstyche تو خط فرمانه. باهاش میتونی فایلهای تست رو با مسیر انتخاب کنی، تستها رو با اسم فیلتر کنی و — که شاید مهمترین قابلیتشه — تستها رو روی نسخههای مشخصی از TypeScript اجرا کنی. این یعنی میتونی مطمئن شی تایپهای کتابخونهت روی چند نسخهٔ مختلف TypeScript همونطور که باید رفتار میکنن، که مخصوصاً برای نگهداری کتابخونههای متنباز خیلی به کار میاد.
نکات کلیدی:
- TSTyche خودِ تایپهای TypeScript رو تست میکنه، نه رفتار زمان اجرای کد رو
- با helperهای آشنای describe()، test()، it() و assertionهای سبک expect کار میکنه
- matcherهای رابطهای مثل .toBe() و .toBeAssignableFrom() تایپها رو با هم مقایسه میکنن
- matcherهای توانایی مثل .toBeCallableWith() و .toAcceptProps() رفتار تابع، کلاس و کامپوننت رو میسنجن
- runner میتونه تستها رو روی نسخههای مختلف TypeScript اجرا کنه؛ نسخهٔ ۷.۲ در دسترسه




