Frontend / Testing

    Testowanie aplikacji React 2024

    Vitest zamiast Jest, Playwright zamiast Selenium, MSW do HTTP mocks i Storybook do component-driven development.

    Vitest
    Unit tests (esbuild)
    Playwright
    E2E multi-browser
    MSW
    HTTP mocking
    Storybook
    Component dev

    6 narzędzi testowych dla React

    Unit, integration i E2E testing — każde narzędzie pokrywa inną warstwę testing pyramid z różną szybkością i zakresem testów.

    Narzędzie Typ testów Język Integracja Szybkość Kiedy
    Vitest Unit / Integration TypeScript Vite native Bardzo szybki (esbuild) Projekty Vite/Nuxt, zamiennik Jest
    Jest Unit / Integration JS / TS Babel/SWC Wolniejszy (Babel) Istniejące projekty, React CRA
    Playwright E2E TypeScript Multi-browser Szybki (parallel) Multi-browser, enterprise, MS
    Cypress E2E TypeScript Chrome-family Wolniejszy (serial) Mały projekt, świetny DX
    MSW HTTP Mocking TypeScript Service Worker Szybki Realistyczne HTTP mocks, integration
    Storybook Component / Visual TypeScript CDD Dobry Komponent dev, dokumentacja, visual regression

    Często zadawane pytania

    Co to jest Vitest i dlaczego zastępuje Jest w projektach Vite?

    Vitest: test runner stworzony przez Evan You (twórca Vite, 2022). Zaprojektowany jako drop-in replacement dla Jest w projektach Vite/esbuild. Dlaczego Vitest zamiast Jest: Jest używa Babel do transformacji — wolny. Vitest używa esbuild — 10-100x szybszy cold start. Vite config sharing — nie potrzebujesz osobnej konfiguracji dla testów. Natywny ESM support (Jest ma problemy z ESM). TypeScript out-of-the-box bez konfiguracji. Vitest API: kompatybilny z Jest (describe, test, it, expect, vi. beforeEach, afterEach, beforeAll, afterAll). vi.fn() — mock functions (jak jest.fn()). vi.mock() — module mocking. vi.spyOn() — spy na metodach. vi.useFakeTimers() — fake timers. Vitest features: Concurrent tests domyślnie. Watch mode HMR (instant test updates). UI mode (vitest --ui) — przeglądarka z wynikami. Coverage (v8 lub istanbul): vitest run --coverage. In-source testing — testy w tym samym pliku co kod. Snapshot testing. Vitest config (vitest.config.ts): environment: 'jsdom' lub 'happy-dom' (szybszy) dla DOM testów. setupFiles, globals, alias. React Testing Library: @testing-library/react — renderowanie komponentów. @testing-library/user-event — symulacja interakcji użytkownika. Queries: getByRole, findByText, queryByLabelText. Vitest + React: screen.getByText, fireEvent, userEvent.click, waitFor.

    Playwright — end-to-end testing, co to jest i jak działa?

    Playwright: end-to-end testing framework (Microsoft, 2020). Chromium, Firefox i WebKit (Safari) — jeden API. Zaprojektowany do zastąpienia Selenium i Puppeteer. Zalety Playwright: Auto-wait: czeka na elementy automatycznie (bez sleep()). Multiple browsers w jednym teście. Network interception (mockowanie API). Mobile emulation. Screenshot i video recording. Playwright API: const {chromium} = require('playwright'). browser = await chromium.launch(). page = await browser.newPage(). await page.goto('https://example.com'). await page.click('text=Login'). await page.fill('#email', 'user@test.pl'). await expect(page).toHaveURL('/dashboard'). Playwright Test (wbudowany test runner): test('should login', async ({page}) => {...}). Fixtures: {page, browser, context, request}. expect(page).toHaveTitle(). expect(page.locator('h1')).toBeVisible(). Locators: page.getByRole('button', {name: 'Submit'}). page.getByText('Witaj'). page.getByLabel('Email'). page.getByPlaceholder('Wpisz email'). page.getByTestId('submit-btn'). Test Isolation: każdy test dostaje nową przeglądarke (context). Czysty state. Playwright Config: playwright.config.ts. projects: chromium, firefox, webkit. baseURL. retries: 2. workers: 4.

    Playwright vs Cypress — kiedy co wybrać do E2E testów?

    Cypress: najpopularniejszy E2E framework (2014). JavaScript/TypeScript. Chrome-family browser (nie Firefox, nie Safari natywnie w open source). Zalety Cypress: Time-travel debugging (snapshots per step). Automatic waiting. Network stubbing (cy.intercept). Excellent DX, świetna dokumentacja. Cypress Dashboard (paid). Wady Cypress: Brak multi-tab support. Brak Firefox/WebKit w open source. Iframe support ograniczony. Nie działa z WebKit (Safari) bez Cypress Cloud. Playwright: Multi-browser (Chrome, Firefox, WebKit). Multi-tab/Multi-window. Testy równoległe out-of-the-box. Szybszy dla dużych suites (parallel). API request testing (APIRequestContext). Network mocking. Accessibility testing (axe). Playwright vs Cypress: Playwright — multi-browser, parallel, MS support, open source (Apache 2). Cypress — lepszy DX dla małych projektów, time-travel, Dashboard. Playwright dla: duże aplikacje z multi-browser wymaganiem. Safari testing krytyczne. Parallel execution ważne. Cypress dla: szybki start, mały zespół, Chrome-only ok. Playwright Codegen: npx playwright codegen https://example.com. Nagrywanie akcji -> generowanie kodu. Playwright Inspector: debugging tool. Playwright Trace Viewer: timeline z screenshots.

    Testing pyramid — unit, integration i E2E testy, jak zbalansować?

    Testing Pyramid (Mike Cohn): Unit tests (dół) — szybkie, wiele, tanie. Integration tests (środek) — wolniejsze, mniej. E2E tests (góra) — wolne, nieliczne, drogie. Unit tests: pojedyncze funkcje/komponenty. Vitest + React Testing Library. Szybkie (milisekundy). Brak zewnętrznych zależności. Mockowanie dependencji. Integration tests: kilka modułów razem. API routes z bazą danych. MSW (Mock Service Worker) dla HTTP. Supertest dla Express/Fastify. E2E tests: pełna aplikacja w przeglądarce. Playwright lub Cypress. Prawdziwe serwery lub staging. Wolne (sekundy/minuty). Modern Testing Trophy (Kent C. Dodds): Static analysis (ESLint, TypeScript) — najtańsze. Unit tests. Integration tests (więcej niż unit). E2E tests (mniej niż integration). Rekomendacja: 70% integration, 20% unit, 10% E2E. MSW (Mock Service Worker): mockowanie HTTP na poziomie Service Worker. Działa w przeglądarce i Node.js. Realistyczne mocks — nie mockujesz modułu ale HTTP layer. setupServer dla Node.js. setupWorker dla przeglądarki. Vitest UI: localhost:51204 (domyślny). Graficzny view testów. Re-run per test. Coverage visualization. Test ID attributes: data-testid='...' — dobra praktyka dla E2E. getByTestId — Playwright i Testing Library.

    Storybook — co to jest i jak wspiera testowanie komponentów?

    Storybook: narzędzie do izolowanego developmentu komponentów UI. Component Driven Development (CDD). Każdy komponent w izolacji — bez kontekstu aplikacji. Stories: warianty komponentu (różne props, states). Storybook 7/8: CSF 3 (Component Story Format). const meta = {component: Button, args: {label: 'Kliknij'}}. export const Primary = {args: {variant: 'primary'}}. export const Disabled = {args: {disabled: true}}. Storybook addons: @storybook/addon-interactions — interaktywne testy w stories. @storybook/addon-a11y — accessibility testing. @storybook/addon-docs — dokumentacja z stories. @storybook/test — vitest/jest w stories. Chromatic: visual regression testing (od twórców Storybook). Screenshot porównanie per komponent. Review UI changes w PR. Automatyczne detekcja zmian wizualnych. Alternatywa: Percy, Applitools Eyes. Storybook Play functions: play: async ({canvasElement}) => {await userEvent.click(canvas.getByRole('button')). await expect(canvas.getByText('Kliknięty')).toBeInTheDocument()}. Portable Stories: import story do Vitest testu. Spójność Storybook i unit tests. Storybook + Next.js: @storybook/nextjs. Automatic mock dla next/image, next/link, next/router. Nowe projekty: Vite + Vitest + Playwright + Storybook to solidny testing stack 2024.

    Czytaj dalej

    Powiązane artykuły

    Kontakt

    Skontaktuj się z nami

    Porozmawiajmy o Twoim projekcie. Bezpłatna wycena w ciągu 24 godzin.

    Wyślij zapytanie

    Bezpłatna wycena w 24h
    Bez zobowiązań
    Indywidualne podejście
    Ekspresowa realizacja

    Telefon

    +48 790 814 814

    Pon-Pt: 9:00 - 18:00

    Email

    adam@fotz.pl

    Odpowiadamy w ciągu 24h

    Adres

    Plac Wolności 16

    61-739 Poznań

    Godziny pracy

    Pon - Pt9:00 - 18:00
    Sob - NdzZamknięte

    Wolisz porozmawiać?

    Zadzwoń teraz i porozmawiaj z naszym specjalistą o Twoim projekcie.

    Zadzwoń teraz