eslint-node-test؛ قوانین ESLint برای node:test
خلاصهٔ کاملتر
سیندره سوروس یه پلاگین ESLint منتشر کرده به اسم eslint-node-test که مخصوص تسترانر داخلی نود یعنی node:test نوشته شده. هدفش سادهست: کمک میکنه اشتباههای رایج رو مرتکب نشی و تستهای یکدستتری بنویسی — همون کاری که پلاگینهای مشابه سالها برای Jest و AVA میکردن، این بار برای تسترانری که خود نود توی جعبه داره.
نصبش با یه npm install --save-dev انجام میشه، ولی چند تا پیشنیاز سفتوسخت داره: ESLint نسخهٔ ۱۰٫۴ به بالا، پیکربندی flat و ESM. بعدش یا هر قانون رو جدا تنظیم میکنی یا یکی از پریستهای آماده رو extends میکنی:
import nodeTest from 'eslint-node-test';
import {defineConfig} from 'eslint/config';
export default defineConfig([
{
files: ['**/*.js'],
plugins: {'node-test': nodeTest},
extends: ['node-test/recommended']
}
]);سه پریست وجود داره: recommended که قوانین پیشنهادی رو فعال میکنه، unopinionated که زیرمجموعهای از همونه و فقط بیمناقشهترین قوانین رو داره، و all که همهچی رو روشن میکنه — برای استفادهٔ عمومی توصیه نشده ولی برای کشف قانونهای تازه به درد میخوره.
بخش زیادی از قوانین دور assertion ها میچرخه و دقیقاً همونجاهایی رو هدف گرفته که آدم بیسروصدا اشتباه میکنه: استفاده از deepEqual وقتی داری با یه مقدار اولیه مقایسه میکنی، یا برعکس strictEqual وقتی طرف مقابل آبجکت یا آرایهست؛ پاسدادن رشته بهجای RegExp به assert.match()؛ دادن تابع async به assert.throws() که اصلاً کار نمیکنه؛ و assertion هایی که نتیجهشون از قبل ثابته. چند قانون هم سبک رو یکدست میکنن، مثل ترجیح assert.match() به تستکردن دستی نتیجهٔ RegExp#test().
دستهٔ مهم بعدی مربوط به کارهای ناهمگامه — همونجایی که تستها بیصدا سبز میشن بدون اینکه چیزی رو واقعاً تست کرده باشن. قوانینی مثل الزام به await کردن assert.rejects()، الزام به await یا return کردن زیرتستهایی که با کانتکست تست ساخته شدن، ممنوعکردن assertion داخل کالبک Promise ای که await نشده، و گرفتن تابعهای async ای که اصلاً await توشون نیست.
یه بخش هم به بهداشت تستها میپردازه: ممنوعیت .only جامونده، الزام به ذکر دلیل موقع skip یا todo کردن تست، جلوگیری از عنوانهای تکراری تو یه اسکوپ، الزام به اینکه هر تست حداقل یه assertion داشته باشه، ممنوعیت منطق شرطی داخل تست و تعریف تست داخل هوک. برای ماک و تایمر هم قانون هست — ترجیح t.mock کانتکست به mock سراسری، ممنوعیت ماککردن ماژولی که بهصورت ایستا import شده، و الزام به جلو بردن تایمرهای ماک بعد از فعالکردنشون.
در مجموع نزدیک به نود قانون تو جدول مستندات فهرست شده که هرکدوم مشخص کرده تو کدوم پریست فعاله، با --fix خودکار اصلاح میشه یا فقط پیشنهاد ویرایشگر داره. سیندره چند پروژهٔ مرتبط رو هم معرفی کرده، از جمله eslint-plugin-unicorn، eslint-package-json و test-extras که assertion ها و ابزارهای کمکی به node:test اضافه میکنه.
نکات کلیدی:
- پلاگین ESLint اختصاصی تسترانر داخلی نود، با نزدیک به ۹۰ قانون
- نیازمند ESLint ۱۰٫۴ به بالا، پیکربندی flat و ESM
- تمرکز اصلی روی assertion های نادرست و کارهای ناهمگام await نشدهست
- قوانین بهداشت تست: بدون .only، بدون عنوان تکراری، هر تست حداقل یه assertion
- سه پریست recommended و unopinionated و all و بخش زیادی از قوانین با --fix خودکار اصلاح میشن




