راه‌اندازی تست در Next.js Cypress، Jest، Playwright و Vitest – تست یعنی عشق قابل مشاهده

تست‌نویسی در Next.js باعث افزایش امنیت، سرعت و پایداری اپلیکیشن می‌شود. این مقاله نحوهٔ راه‌اندازی چهار ابزار محبوب تست‌نویسی را آموزش می‌دهد: Cypress برای تست‌های E2E و کامپوننت، Jest برای تست واحد و snapshot، Playwright برای تست بین مرورگرها، و Vitest برای تست سریع و TDD. همچنین استراتژی تست و اسکریپت‌های CI/CD ارائه شده‌اند.

CypressJestPlaywrightVitest

~2 دقیقه مطالعه · آخرین به‌روزرسانی ۲۲ آذر ۱۴۰۴

ابزارهای تست در Next.js


ابزارمناسب برای
Cypressتست End-to-End و کامپوننت
Jestتست واحد و snapshot
Playwrightتست بین مرورگرها
Vitestتست سریع و TDD

۱. Cypress – تست E2E و کامپوننت


npm install -D cypress
npx cypress open

در package.json:

"scripts": {
  "cypress:open": "cypress open"
}

نمونه تست E2E:

cy.visit('/')
cy.get('a[href*="about"]').click()
cy.url().should('include', '/about')

نمونه تست کامپوننت:

cy.mount(<Page />)
cy.get('h1').should('contain', 'Home')

۲. Jest – تست واحد و snapshot


npm install -D jest jest-environment-jsdom @testing-library/react @testing-library/jest-dom
npm init jest@latest

در jest.config.ts:

testEnvironment: 'jsdom',
setupFilesAfterEnv: ['<rootDir>/jest.setup.ts']

نمونه تست:

render(<Page />)
expect(screen.getByRole('heading')).toBeInTheDocument()

تست snapshot:

expect(container).toMatchSnapshot()

۳. Playwright – تست بین مرورگرها


npm init playwright@latest

نمونه تست:

await page.goto('/')
await page.click('text=About')
expect(page).toHaveURL('/about')

۴. Vitest – تست سریع و TDD


npm install -D vitest @vitejs/plugin-react jsdom @testing-library/react

در vitest.config.mts:

test: {
  environment: 'jsdom',
  globals: true,
}

نمونه تست:

render(<Page />)
expect(screen.getByRole('heading', { name: 'Home' })).toBeDefined()

استراتژی تست پیشنهادی


  • تست واحد: Vitest یا Jest
  • تست کامپوننت: Cypress
  • تست E2E: Playwright یا Cypress
  • CI/CD: اجرای همه در حالت headless

اسکریپت‌های CI در package.json


"scripts": {
  "test": "vitest",
  "test:watch": "vitest --watch",
  "test:jest": "jest",
  "e2e": "start-server-and-test start http://localhost:3000 cypress",
  "e2e:headless": "start-server-and-test start http://localhost:3000 \"cypress run\"",
  "playwright": "playwright test",
  "playwright:headless": "playwright test --headless"
}

نوشته و پژوهش‌شده توسط دکتر شاهین صیامی

مقالات مرتبط

مسیریابی پیشرفته و هوک‌های عملکرد در Next.js — راهنمای توسعه‌دهنده برای App Router

Next.js مجموعه‌ای غنی از هوک‌های کلاینت و ابزارهای کش و ناوبری را در اختیار توسعه‌دهندگان قرار می‌دهد. از خواندن پارامترهای مسیر تا گزارش Web Vitals و مدیریت کش، این مقاله مهم‌ترین ابزارهای App Router را با مثال‌های کاربردی معرفی می‌کند.

ادامه

مدیریت احراز هویت و کش در Next.js — راهنمای توسعه‌دهنده برای امنیت و عملکرد پویا

Next.js با معرفی قابلیت‌های آزمایشی جدید، امکان کنترل دقیق‌تر دسترسی و کش داده‌ها را فراهم کرده است. تابع unauthorized برای مدیریت خطای 401 و هدایت کاربران به صفحه ورود، unstable_cache برای کش هوشمند عملیات سنگین، updateTag برای بازسازی آنی داده‌ها، و useLinkStatus برای نمایش وضعیت ناوبری استفاده می‌شوند. این مقاله نحوه استفاده از این ابزارها را با مثال‌های کاربردی و نکات مهم بررسی می‌کند.

ادامه

redirect و refresh در Next.js — ریدایرکت‌های هوشمند و تازه‌سازی مسیر در Server Actions

تابع redirect در Next.js برای هدایت کاربر به مسیر جدید استفاده می‌شود و بسته به نوع استفاده، پاسخ HTTP با وضعیت 307 یا 303 ارسال می‌کند. این تابع در Server Components، Client Components، Route Handlers و Server Actions قابل استفاده است. تابع refresh نیز برای تازه‌سازی مسیر کلاینت از درون Server Action استفاده می‌شود. این مقاله نحوه استفاده از هر دو تابع را با مثال‌های کاربردی و نکات مهم توضیح می‌دهد.

ادامه

Next.js با معرفی NextRequest و NextResponse، APIهای Request و Response مرورگر را گسترش داده و ابزارهای قدرتمندی برای مدیریت کوکی‌ها، هدرها، ریدایرکت‌ها، بازنویسی مسیرها و پاسخ‌های JSON فراهم کرده است. این مقاله نحوه استفاده از این ابزارها را با مثال‌های کاربردی و نکات امنیتی توضیح می‌دهد.

Next.js با معرفی NextRequest و NextResponse، APIهای Request و Response مرورگر را گسترش داده و ابزارهای قدرتمندی برای مدیریت کوکی‌ها، هدرها، ریدایرکت‌ها، بازنویسی مسیرها و پاسخ‌های JSON فراهم کرده است. این مقاله نحوه استفاده از این ابزارها را با مثال‌های کاربردی و نکات امنیتی توضیح می‌دهد.

ادامه

headers، ImageResponse، notFound و permanentRedirect در Next.js — مدیریت درخواست‌ها، تولید تصویر، خطا و ریدایرکت

Next.js ابزارهای قدرتمندی برای مدیریت درخواست‌ها و پاسخ‌ها در کامپوننت‌های سروری فراهم کرده است. تابع headers برای خواندن هدرهای HTTP ورودی، ImageResponse برای تولید تصاویر داینامیک، notFound برای نمایش صفحه خطای 404، و permanentRedirect برای ریدایرکت دائمی کاربران استفاده می‌شوند. این مقاله نحوه استفاده از هر یک را با مثال‌های کاربردی توضیح می‌دهد.

ادامه

راهنمای کامل استفاده از metadata و generateMetadata در Next.js

در نسخه‌های مدرن Next.js، مدیریت metadata صفحات بسیار قدرتمندتر و ساده‌تر شده است. metadata به‌صورت خودکار در تگ <head> صفحات تزریق می‌شود و نقش مهمی در SEO، اشتراک‌گذاری اجتماعی و تجربه کاربری دارد. این مقاله دو روش اصلی تعریف metadata را بررسی می‌کند: استفاده از آبجکت ثابت metadata و تابع داینامیک generateMetadata.

ادامه