На одну сторінку
Тестування: шпаргалка
Те, що варто тримати під рукою. Якщо рядок незрозумілий, повернись у відповідний урок курсу.
Відкрити курс: Тестування: unit, integration, e2eVitest: основне
| Що | Як |
|---|---|
| Група і тест | describe("cart", () => { it("sums", () => {}) }) |
| Рівність значень і об'єктів | expect(a).toBe(1); expect(obj).toEqual({ a: 1 }) |
| Частковий збіг | expect(res).toMatchObject({ status: 'ok' }) |
| Виняток | expect(() => fn()).toThrow(RangeError) |
| Проміс відхилено | await expect(p).rejects.toThrow('not found') |
| Табличний тест | it.each(cases)("$input", ({ input }) => {}) |
| Запуск у CI | vitest run |
Test doubles у Vitest
| Що | Як |
|---|---|
| Порожня функція з історією викликів | const fn = vi.fn() |
| Заготовлена відповідь | vi.fn().mockResolvedValue(user) |
| Шпигун на методі | vi.spyOn(obj, 'send') |
| Перевірка виклику | expect(fn).toHaveBeenCalledWith('a', 1) |
| Фальшиві таймери | vi.useFakeTimers(); vi.advanceTimersByTime(300) |
| Зафіксувати дату | vi.setSystemTime(new Date('2026-01-01')) |
| Мережа через MSW | setupServer(http.get(url, () => HttpResponse.json({}))) |
Інтеграційні тести
| Що | Як |
|---|---|
| Postgres у Testcontainers | await new PostgreSqlContainer('postgres:17').start() |
| Рядок підключення | container.getConnectionUri() |
| Ізоляція тесту | BEGIN у beforeEach, ROLLBACK в afterEach |
| Запит до API | await request(app).post('/users').send(body).expect(201) |
| Будь-яке число в полі | expect(res.body.id).toEqual(expect.any(Number)) |
Playwright
| Що | Як |
|---|---|
| Запуск і UI режим | pnpm exec playwright test --ui |
| Локатор за роллю | page.getByRole('button', { name: 'Save' }) |
| Поле за підписом | page.getByLabel('Email').fill('[email protected]') |
| Web-first перевірка | await expect(locator).toBeVisible() |
| Свій fixture | test.extend<{ user: User }>({ user: async ({}, use) => {} }) |
| Підміна мережі | await page.route('**/api/pay', (r) => r.fulfill({ json: {} })) |
| Trace для повторів | use: { trace: 'on-first-retry' } |