Запуск тестов и отчёты

Запуск тестов — вызов test runner (Jest, Vitest, Playwright) из CLI или CI, с возможностью фильтрации, параллелизации и генерации отчётов в различных форматах.

Зачем нужно

Знание флагов и режимов запуска экономит время: watch-режим ускоряет разработку, фильтрация по имени позволяет запустить один тест, coverage-флаг показывает непокрытые участки. Правильная настройка отчётов необходима для интеграции с CI и сбора метрик качества.

Где используется

  • Локальная разработка: watch-режим и фильтрация
  • CI/CD: запуск всех тестов, генерация JUnit XML, badges
  • Code review: coverage-отчёты как артефакты PR

Основной контент

Jest — основные команды

# Запустить все тесты
npx jest

# Watch-режим (перезапуск при изменении файлов)
npx jest --watch
npx jest --watchAll

# Фильтрация по имени теста
npx jest --testNamePattern="корзина"
npx jest -t "корзина"

# Фильтрация по файлу
npx jest cart.test.js
npx jest src/cart    # по паттерну пути

# Coverage
npx jest --coverage

# Параллельность
npx jest --maxWorkers=4
npx jest --runInBand   # последовательный запуск (для отладки)

# Verbose вывод
npx jest --verbose

# Обновить snapshots
npx jest --updateSnapshot

Vitest — основные команды

npx vitest           # watch-режим по умолчанию
npx vitest run       # разовый запуск
npx vitest --reporter=verbose
npx vitest --coverage
npx vitest run src/cart.test.ts

Playwright — запуск и отчёты

# Запуск всех тестов
npx playwright test

# С UI-интерфейсом
npx playwright test --ui

# Конкретный файл
npx playwright test tests/login.spec.ts

# Конкретный браузер
npx playwright test --project=chromium

# Retry для CI
npx playwright test --retries=2

# HTML-отчёт
npx playwright test --reporter=html
npx playwright show-report

Reporters в Jest

// jest.config.js
module.exports = {
  reporters: [
    'default',                                    // стандартный вывод
    ['jest-junit', {                              // для CI (JUnit XML)
      outputDirectory: 'reports',
      outputName: 'jest-junit.xml',
    }],
    ['jest-html-reporters', {                     // HTML-отчёт
      publicPath: './html-report',
      filename: 'report.html',
    }],
  ],
};

package.json скрипты

{
  "scripts": {
    "test": "jest",
    "test:watch": "jest --watch",
    "test:coverage": "jest --coverage",
    "test:ci": "jest --ci --coverage --reporters=default --reporters=jest-junit",
    "test:e2e": "playwright test",
    "test:e2e:ui": "playwright test --ui"
  }
}

GitHub Actions — запуск с отчётом

- name: Run tests
  run: npm run test:ci

- name: Upload coverage
  uses: codecov/codecov-action@v4
  with:
    file: ./coverage/lcov.info

- name: Upload test results
  uses: actions/upload-artifact@v4
  if: always
  with:
    name: test-results
    path: reports/jest-junit.xml

Частые ошибки

  • --watchAll в CI — watch-режим не завершается; в CI используй jest --ci или jest --runInBand
  • Нет --ci флага в CI — без него Jest разрешает обновление snapshots; --ci блокирует это и завершается с ошибкой при устаревших снимках
  • Параллельный запуск с общей БД — тесты конкурируют за ресурс; используй --runInBand или изолируй БД на worker

Связанные темы

Ресурсы