---
title: "Тестування"
description: "Документація тестування для платформи Ring"
locale: "uk"
---
# Посібник з тестування

Комплексна стратегія тестування для платформи Ring з unit тестами, інтеграційними тестами та end-to-end тестуванням.

## 🧪 Стратегія тестування

### Піраміда тестування
Платформа Ring дотримується підходу піраміди тестування:

1. **Unit тести** (70%) - Індивідуальні функції та компоненти
2. **Інтеграційні тести** (20%) - Взаємодія компонентів та API endpoints
3. **End-to-End тести** (10%) - Повні робочі процеси користувачів

## ⚡ Unit тестування

### Конфігурація Jest
// jest.config.js

{`module.exports = {
  testEnvironment: 'jsdom',
  setupFilesAfterEnv: ['/jest.setup.js'],
  testMatch: ['**/__tests__/**/*.test.{js,ts,tsx}'],
  collectCoverageFrom: [
    'src/**/*.{js,ts,tsx}',
    '!src/**/*.d.ts'
  ]
}`}

### Приклад тестування компонентів
// __tests__/components/EntityCard.test.tsx

{`import { render, screen } from '@testing-library/react'
import { EntityCard } from '@/components/EntityCard'

describe('EntityCard', () => {
  it('відображає інформацію про сутність правильно', () => {
    const entity = {
      id: '1',
      name: 'Тестова Компанія',
      type: 'technology'
    }

    render()

    expect(screen.getByText('Тестова Компанія')).toBeInTheDocument()
    expect(screen.getByText('technology')).toBeInTheDocument()
  })
})`}

## 🔗 Інтеграційне тестування

### Тестування API маршрутів
// __tests__/api/entities.test.ts

{`import { POST } from '@/app/api/entities/route'
import { NextRequest } from 'next/server'

describe('/api/entities', () => {
  it('створює сутність успішно', async () => {
    const request = new NextRequest('http://localhost:3000/api/entities', {
      method: 'POST',
      body: JSON.stringify({
        name: 'Тестова Сутність',
        type: 'technology'
      })
    })

    const response = await POST(request)
    const data = await response.json()

    expect(response.status).toBe(201)
    expect(data.entity.name).toBe('Тестова Сутність')
  })
})`}

## 🎭 End-to-End тестування

### Конфігурація Playwright
// playwright.config.ts

{`import { defineConfig } from '@playwright/test'

export default defineConfig({
  testDir: './e2e',
  use: {
    baseURL: 'http://localhost:3000',
    headless: true,
    screenshot: 'only-on-failure'
  },
  projects: [
    { name: 'chromium', use: { ...devices['Desktop Chrome'] } },
    { name: 'firefox', use: { ...devices['Desktop Firefox'] } }
  ]
})`}

### Приклад E2E тесту
// e2e/authentication.spec.ts

{`import { test, expect } from '@playwright/test'

test('користувач може увійти через Google', async ({ page }) => {
  await page.goto('/')
  await page.click('text=Увійти')

  // Mock Google OAuth response
  await page.route('**/api/auth/**', route => {
    route.fulfill({
      status: 200,
      body: JSON.stringify({ user: { name: 'Тестовий Користувач' } })
    })
  })

  await page.click('text=Увійти через Google')
  await expect(page.locator('text=Ласкаво просимо, Тестовий Користувач')).toBeVisible()
})`}

## 📊 Покриття тестами

### Вимоги до покриття
- **Загалом**: > 80% покриття рядків
- **Критичні шляхи**: > 95% покриття
- **Нові функції**: 100% покриття обов'язкове

### Запуск тестів
Unit тести Режим спостереження під час розробки Звіт про покриття E2E тести

{`npm run test

npm run test:watch

npm run test:coverage

npm run test:e2e`}

---

*Повна документація тестування незабаром.*
