Vitest 5.1 اومد: فقط تستهایی که عوض شدن اجرا میشن
خلاصهٔ کاملتر
تیم Vitest نسخهٔ 5.1 رو منتشر کرده و مهمترین قابلیتش فلگ آزمایشی --since-last-run هست. فلگ قبلی یعنی --changed فایلها رو با یه مرجع Git مقایسه میکرد، پس به ریپازیتوری نیاز داشت و تا commit میکردی، تغییر دیگه «تغییر» حساب نمیشد. فلگ جدید فایلها رو با آخرین اجرای هر تست مقایسه میکنه.
اجرای اول همهٔ تستها رو اجرا میکنه و ثبت میکنه هر تست چه فایلهایی رو لود کرده، حتی dynamic importها، mockها، فایلهای setup و اسنپشاتها. از اون به بعد Vitest زمان تغییر (mtime) این فایلها رو چک میکنه و فقط تستهای درگیر رو اجرا میکنه. تستی هم که دفعهٔ قبل fail شده، تا وقتی درست نشه دوباره اجرا میشه. تیم Vitest میگه چون Git وسط نیست، این فلگ برای ایجنتهای کدنویسی هوش مصنوعی که بعد از هر تغییر تست میگیرن خیلی بهدردبخوره.
قابلیت بعدی مرور تعاملی اسنپشاتهاست. قبلاً تو watch mode با کلید u همهٔ اسنپشاتهای خراب یهجا آپدیت میشدن. حالا با زدن i هر اسنپشات جدا با diff نشون داده میشه و با a قبولش میکنی یا با r نسخهٔ قدیمی رو نگه میداری. این برای inline snapshotها، فایلهای .snap و ARIA snapshotها تو Browser Mode کار میکنه.
Trace View (یعنی ضبط قدمبهقدم کارهایی که تست تو مرورگر انجام داده) حالا پایدار شده و بهصورت پیشفرض تو حالت 'failure-only' روشنه. تو این حالت فقط برای تستهای fail شده trace نگه داشته میشه و به تستهای موفق هزینهای اضافه نمیکنه. اگه بخوای همهٔ تستها ضبط بشن، حالت رو 'on' بذار:
export default defineConfig({
test: {
browser: {
traceView: 'on', // 'failure-only' (default) | 'on' | 'off'
},
},
})برای تستهای Node هم گزینهٔ آزمایشی experimental.traceTimeline اومده که قدمهای expect.poll، vi.waitFor و vi.waitUntil رو موقع fail شدن چاپ میکنه؛ یعنی میبینی تست منتظر چی بوده و هر انتظار چقدر طول کشیده، که برای تستهای flaky خیلی کمکه. فلگ --last-failed هم فقط تستهایی رو اجرا میکنه که دفعهٔ قبل fail شدن، حتی بین پروسههای جدا.
تو Browser Mode، mock کردن ماژولها قبلاً با رهگیری درخواستهای شبکه انجام میشد که با زیاد شدن ماژولها کند میشد. حالا Vitest از import map (یعنی قانونی تو مرورگر که آدرس یه ماژول رو به نسخهٔ دیگهای هدایت میکنه) استفاده میکنه. تو بنچمارکی با 500 فایل تست، زمان سوییت پر از mock از 56.4 به 27.2 ثانیه رسیده. این گزینه آزمایشیه و اگه تستهات خراب شد، میتونی browser.importMapMocks رو false کنی.
نکات کلیدی:
- فلگ --since-last-run بدون Git و بر اساس mtime فایلها فقط تستهای درگیر تغییر رو اجرا میکنه.
- با کلید i تو watch mode میشه اسنپشاتهای خراب رو یکییکی با a قبول یا با r رد کرد.
- Trace View پایدار شده و پیشفرضش 'failure-only' هست؛ browser.traceView.enabled منسوخ شده.
- mock با import map تو بنچمارک سوییت پر از mock رو 52 درصد سریعتر کرده (Chromium 133+، Safari 18.4+، Firefox 150+).
- فلگ --last-failed تستهای fail شدهٔ اجرای قبلی رو از results cache میخونه و فقط همونا رو اجرا میکنه.




