Coverage и тесты в CI
↑ 6.3 Качество кода и тестирование: продвинутый уровень · ← Предыдущая · → Следующая
Зачем это на собесе
Покрытие — метрика, которой легко манипулировать. Важно показать, как использовать её разумно.
Метрики покрытия
Строки, ветки (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).
Вопросы с ответами
Достаточно ли высокого покрытия?
Нет. Покрытие показывает, что код выполнялся, но не то, что поведение проверено. Смотрите на ветки, критические пути и качество assert.
Как ускорить тесты в CI?
Параллелизм и шардинг, кэш зависимостей, запуск только затронутых пакетов, разделение быстрых и медленных наборов.