برنامه نویسی

تماس تلفظ های “انتظار” را در تست های نمایشنامه نویس با ESLINT از دست ندهید

آیا تا به حال تست نمایشنامه نویس را اجرا کرده اید که فقط … همانطور که انتظار می رفت رفتار نکردید؟ شاید به طور تصادفی شکست بخورد. شاید آن را به صورت محلی بگذرد اما در CI شکسته شد. مقصر؟ اغلب – این فقط یک است مفقود awaitبشر

این یکی از ساده ترین اشتباهات در کد Async است و در آزمایش می تواند به شرایط مسابقه و نتایج پوسته پوسته منجر شود.

مشکل: مفقود await می تواند آزمون شما را بشکند

بیایید به یک مثال ساده نگاه کنیم. ما روی یک دکمه کلیک می کنیم و انتظار داریم یک معین ظاهر شود:

await page.getByRole('button', { name: 'Submit' }).click();
expect(page.getByRole('dialog')).toBeVisible(); // ❌ Missing 'await'
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

در expect() تماس یک وعده را برمی گرداند ، اما ما این کار را نکردیم await این ، بنابراین نمایشنامه نویس قبل از اتمام حرکت می کند. گاهی اوقات معین به موقع ظاهر می شود. گاهی اوقات اینگونه نیست. نتیجه؟ تست پوستهبشر

چه چیزی بدتر؟ در مقابل کد به شما هشدار نمی دهد در مورد این به طور پیش فرض.

رفع: اجازه دهید Eslint وعده های شناور را صید کند

خوشبختانه ، ما می توانیم یک قانون ESLINT TypeScript را تنظیم کنیم تا به ما در گرفتن خودکار این اشتباهات کمک کند. قانون خوانده می شود @typescript-eslint/no-floating-promises، و هر قولی را که به درستی اداره نمی شود برجسته می کند.

در اینجا نحوه تنظیم آن آورده شده است:

1. پشتیبانی ESLINT و TYPECRIPT را نصب کنید

اگر قبلاً (اطمینان حاصل کنید که ESLINT V9+ و TYPESCRIPT دارید):

npm install --save-dev eslint typescript-eslint typescript
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

2. ایجاد tsconfig.json (در صورت لزوم)

در @typescript-eslint/no-floating-promises قانون به اطلاعات نوع نیاز دارد. اطمینان حاصل کنید که tsconfig.json در ریشه پروژه خود پرونده کنید. اگر اینطور نیست ، یک مورد اساسی ایجاد کنید:

// tsconfig.json
{
  "compilerOptions": {
    "target": "ES2022",
    "module": "NodeNext",
    "moduleResolution": "NodeNext",
    "strict": true,
    "esModuleInterop": true,
    "skipLibCheck": true,
    "forceConsistentCasingInFileNames": true,
    "noEmit": true // Important for linting without compiling
    // Add other options relevant to your project (e.g., "jsx": "react-jsx")
  },
  "include": ["**/*.ts", "**/*.tsx", "**/*.js", "**/*.mjs"],
  "exclude": ["node_modules"]
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

3. پیکربندی Eslint در eslint.config.mjs

ایجاد یا بروزرسانی eslint.config.mjs در ریشه پروژه خود برای فعال کردن نوع آگاهی از نوع:

// eslint.config.mjs
import eslint from '@eslint/js';
import tseslint from 'typescript-eslint';

export default tseslint.config(
  eslint.configs.recommended,
  // Use recommendedTypeChecked for rules requiring type information
  ...tseslint.configs.recommendedTypeChecked,
  {
    // Configure language options for type checking
    languageOptions: {
      parserOptions: {
        project: true, // Use the tsconfig.json in the root
      },
    },
    rules: {
      '@typescript-eslint/no-floating-promises': 'error',
      // Other rules can be added here
    },
  },
  {
    // Optionally, ignore specific files/folders
    ignores: ['dist/**', 'node_modules/**', 'playwright.config.ts'], // Adjust as needed
  }
);
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

ESLINT V9+ از قالب پرونده پیکربندی جدید استفاده می کند. برای اطلاعات بیشتر ، مستندات ESLINT را پرداخت کنید.

4. پسوند کد ESLINT vs را نصب کنید

برای دیدن خطاها به طور مستقیم در ویرایشگر خود ، حتما پسوند رسمی ESLINT را در VS Code نصب کنید. جستجو کردن dbaeumer.vscode-eslint در نمای برنامه های افزودنی و روی نصب کلیک کنید.

نکته: اگر هشدارهای ESLINT بلافاصله پس از پیکربندی ظاهر نمی شود ، سعی کنید پنجره VS Code را بارگیری مجدد کنید (پالت فرمان: Developer: Reload Window).

نتیجه: بازخورد فوری در VS Code

حالا ، وقتی فراموش می کنید await، VS Code یک خط squiggly را تحت این مسئله نشان می دهد قبل از اینکه حتی آزمون را اجرا کنیدبشر

در اینجا نسخه ثابت کد قبلی وجود دارد:

await page.getByRole('button', { name: 'Submit' }).click();
await expect(page.getByRole('dialog')).toBeVisible(); // ✅ Correct!
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

این یک کلمه کلیدی مفقود شده می تواند دنیای تفاوت را ایجاد کند ، و اکنون دیگر هرگز آن را از دست نخواهید داد.

جایزه: بررسی نوع را به CI خود اضافه کنید

یک شبکه ایمنی اضافی می خواهید؟ بررسی Typescript را به خط لوله CI خود اضافه کنید:

npx eslint && tsc
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

در صورت امکان تنظیمات دقیق ، کد شما به طور تمیز کامپایل می کند و در صورت امکان تنظیمات دقیق ، مشکلات Async را پرچم می زند.


خداحافظی از تست های پوسته پوسته

و همین است! دیگر دزدکی نیست await مسائلی که تست های نمایشنامه نویس خود را افزایش می دهد. یک بار Eslint را تنظیم کنید ، و آینده شما هر بار که مفقود شوید از شما تشکر می کنید await گرفتار شدن پیش از این یک اشکال پوسته پوسته می شود.

اگر این نکته به شما کمک کرد ، اظهار نظر کنید و احساس راحتی کنید که آن را با تیم خود به اشتراک بگذارید. آزمایش مبارک!

آزمایش مبارک با نمایشنامه نویس!

پیوندهای مفید

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

همچنین ببینید
بستن
دکمه بازگشت به بالا