На одну сторінку

Тестування: шпаргалка

Те, що варто тримати під рукою. Якщо рядок незрозумілий, повернись у відповідний урок курсу.

Відкрити курс: Тестування: unit, integration, e2e

Vitest: основне

ЩоЯк
Група і тест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 }) => {})
Запуск у CIvitest 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'))
Мережа через MSWsetupServer(http.get(url, () => HttpResponse.json({})))

Інтеграційні тести

ЩоЯк
Postgres у Testcontainersawait new PostgreSqlContainer('postgres:17').start()
Рядок підключенняcontainer.getConnectionUri()
Ізоляція тестуBEGIN у beforeEach, ROLLBACK в afterEach
Запит до APIawait 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()
Свій fixturetest.extend<{ user: User }>({ user: async ({}, use) => {} })
Підміна мережіawait page.route('**/api/pay', (r) => r.fulfill({ json: {} }))
Trace для повторівuse: { trace: 'on-first-retry' }

Розділи платформи