Coverage и тесты в CI

↑ 6.3 Качество кода и тестирование: продвинутый уровень · ← Предыдущая · → Следующая

Желательно~3 мин чтенияУровень: middle

Зачем это на собесе

Покрытие — метрика, которой легко манипулировать. Важно показать, как использовать её разумно.

Метрики покрытия

Строки, ветки (branches), функции, операторы. Branch coverage информативнее line coverage.

Vitest

// vitest.config.ts
export default defineConfig({
  test: {
    coverage: {
      provider: 'v8',
      reporter: ['text', 'lcov'],
      include: ['src/**/*.{ts,vue}'],
      exclude: ['src/**/*.stories.ts', 'src/main.ts'],
      thresholds: { lines: 80, branches: 70 },
    },
  },
})

Тесты в CI

- run: npm ci
- run: npx vitest run --coverage
- run: npx playwright install --with-deps chromium
- run: npx playwright test
- uses: actions/upload-artifact@v4
  if: always()
  with: { name: playwright-report, path: playwright-report }

Подходы

  • порог на новый код (diff coverage), а не на всю историю;
  • отчёт в PR (Codecov, SonarQube);
  • быстрые тесты — на каждый push, E2E — на PR или nightly;
  • шардинг и параллелизм: --shard=1/4;
  • кэш зависимостей и браузеров.

Ловушки

100% покрытие не гарантирует качества: тест без assertion считается покрытием. Погоня за процентом стимулирует бессмысленные тесты. Дополняйте мутационным тестированием (Stryker).

Вопросы с ответами