Секция test в конфигурации Vite используется для
настройки среды тестирования при работе с Vitest. Несмотря на то что
Vitest тесно интегрирован с Vite и наследует многие его механизмы,
тестовая среда имеет собственный набор параметров, влияющих на запуск
тестов, обработку модулей, окружение исполнения, покрытие кода,
мокирование, таймауты и поведение раннера.
Конфигурация располагается внутри vite.config.js,
vite.config.ts или отдельного файла
vitest.config.ts.
Пример базовой структуры:
import { defineConfig } from 'vite'
export default defineConfig({
test: {
globals: true,
environment: 'jsdom',
},
})
При использовании vitest/config конфигурация выглядит
следующим образом:
import { defineConfig } from 'vitest/config'
export default defineConfig({
test: {
globals: true,
},
})
Vitest использует инфраструктуру Vite:
Благодаря этому тесты работают в среде, максимально близкой к реальному приложению.
Пример:
import { defineConfig } from 'vitest/config'
import path from 'node:path'
export default defineConfig({
resolve: {
alias: {
'@': path.resolve(__dirname, './src'),
},
},
test: {
globals: true,
},
})
Тот же алиас автоматически будет доступен в тестах:
import { sum } from '@/utils/sum'
globalsПараметр globals включает глобальные функции
тестирования:
test: {
globals: true,
}
После этого становятся доступны:
describeittestexpectbeforeEachafterEachviБез необходимости импортировать их вручную.
Пример:
describe('math', () => {
it('adds numbers', () => {
expect(1 + 1).toBe(2)
})
})
Если globals: false, требуется импорт:
import { describe, it, expect } from 'vitest'
Во многих крупных проектах глобальный режим отключают:
test: {
globals: false,
}
Это позволяет:
environmentОпределяет окружение выполнения тестов.
nodeСреда Node.js.
test: {
environment: 'node',
}
Подходит для:
Пример:
import fs from 'node:fs'
test('reads file', () => {
const content = fs.readFileSync('./test.txt', 'utf8')
expect(content).toContain('hello')
})
jsdomЭмуляция браузера через JSDOM.
test: {
environment: 'jsdom',
}
Используется для:
Пример:
document.body.innerHTML = `
<button id="btn">Click</button>
`
const button = document.querySelector('#btn')
expect(button?.textContent).toBe('Click')
happy-domБолее быстрая DOM-реализация.
test: {
environment: 'happy-dom',
}
Особенности:
Часто применяется в CI-средах.
edge-runtimeЭмуляция Edge Runtime.
test: {
environment: 'edge-runtime',
}
Подходит для:
environmentOptionsПозволяет передавать параметры конкретному окружению.
Пример для JSDOM:
test: {
environment: 'jsdom',
environmentOptions: {
jsdom: {
url: 'https://example.com',
},
},
}
Это влияет на:
window.location.href
setupFilesФайлы предварительной инициализации.
test: {
setupFiles: ['./tests/setup.ts'],
}
Файл выполняется перед тестами.
Пример:
import '@testing-library/jest-dom'
test: {
setupFiles: [
'./tests/dom.ts',
'./tests/mocks.ts',
'./tests/polyfills.ts',
],
}
includeОпределяет список тестовых файлов.
test: {
include: ['src/**/*.test.ts'],
}
По умолчанию Vitest ищет:
*.test.*
*.spec.*
excludeИсключение файлов.
test: {
exclude: [
'node_modules',
'dist',
'e2e',
],
}
watchРежим наблюдения за файлами.
test: {
watch: true,
}
При изменении файлов тесты запускаются автоматически.
Для CI обычно отключают:
test: {
watch: false,
}
reportersНастройка форматов вывода.
test: {
reporters: ['default'],
}
test: {
reporters: ['verbose'],
}
Выводит каждый тест отдельно.
test: {
reporters: ['junit'],
}
Используется в CI/CD.
test: {
reporters: [
'default',
'json',
'html',
],
}
outputFileФайл сохранения отчёта.
test: {
reporters: ['json'],
outputFile: {
json: './reports/tests.json',
},
}
coverageНастройка покрытия кода.
test: {
coverage: {
enabled: true,
},
}
coverage: {
provider: 'v8',
}
Быстрее и используется по умолчанию.
coverage: {
provider: 'istanbul',
}
Даёт более гибкую аналитику.
coverage: {
reporter: [
'text',
'html',
'json',
],
}
coverage: {
exclude: [
'tests/',
'src/types/',
],
}
coverage: {
thresholds: {
lines: 90,
functions: 90,
branches: 80,
statements: 90,
},
}
Если покрытие ниже порога — тесты завершаются ошибкой.
mockResetАвтоматический сброс моков.
test: {
mockReset: true,
}
Эквивалент:
vi.resetAllMocks()
после каждого теста.
restoreMocksВосстанавливает оригинальные реализации.
test: {
restoreMocks: true,
}
Особенно полезно при spyOn.
clearMocksОчищает историю вызовов.
test: {
clearMocks: true,
}
Сбрасывает:
mock.calls
Очищает историю вызовов:
mock.calls = []
Дополнительно удаляет реализации:
mockImplementation(() => {})
Возвращает оригинальные функции.
threadsУправление многопоточностью.
test: {
threads: true,
}
Vitest запускает тесты параллельно.
test: {
threads: false,
}
Полезно для:
maxThreadsМаксимальное число потоков.
test: {
maxThreads: 4,
}
minThreadsМинимальное число потоков.
test: {
minThreads: 2,
}
testTimeoutГлобальный таймаут теста.
test: {
testTimeout: 5000,
}
hookTimeoutТаймаут lifecycle hooks.
test: {
hookTimeout: 10000,
}
Применяется к:
beforeAllbeforeEachafterEachafterAllteardownTimeoutТаймаут завершения worker-процессов.
test: {
teardownTimeout: 10000,
}
bailОстановка после определённого количества ошибок.
test: {
bail: 1,
}
После первого падения выполнение прекращается.
silentПодавление логов.
test: {
silent: true,
}
logHeapUsageЛогирование потребления памяти.
test: {
logHeapUsage: true,
}
Полезно при поиске memory leak.
allowOnlyКонтроль .only.
test: {
allowOnly: false,
}
Запрещает коммит тестов с:
it.only()
describe.only()
Обычно включается в CI.
passWithNoTestsРазрешает успешный запуск без тестов.
test: {
passWithNoTests: true,
}
isolateИзоляция тестовых файлов.
test: {
isolate: true,
}
Каждый файл получает отдельный контекст выполнения.
test: {
isolate: false,
}
Иногда ускоряет запуск, но может приводить к утечкам состояния.
poolТип пула worker-процессов.
test: {
pool: 'threads',
}
Использует worker threads.
test: {
pool: 'forks',
}
Использует child process.
Полезно при несовместимости native-модулей с threads.
depsНастройка обработки зависимостей.
test: {
deps: {
inline: ['lodash-es'],
},
}
Позволяет трансформировать ESM-пакеты.
test: {
deps: {
external: ['large-lib'],
},
}
aliasЛокальные алиасы тестовой среды.
test: {
alias: {
'@mocks': '/tests/mocks',
},
}
cssОбработка CSS в тестах.
test: {
css: true,
}
test: {
css: false,
}
Ускоряет выполнение.
sequenceКонтроль порядка выполнения.
test: {
sequence: {
shuffle: true,
},
}
Перемешивание тестов помогает находить скрытые зависимости.
test: {
sequence: {
concurrent: true,
},
}
benchmarkНастройки benchmark-тестов.
test: {
benchmark: {
include: ['bench/**/*.bench.ts'],
},
}
typecheckПроверка типов TypeScript.
test: {
typecheck: {
enabled: true,
},
}
typecheck: {
include: ['src/**/*.test-d.ts'],
}
testimport { defineConfig } from 'vitest/config'
export default defineConfig({
test: {
globals: true,
environment: 'jsdom',
setupFiles: [
'./tests/setup.ts',
],
include: [
'src/**/*.test.ts',
],
exclude: [
'dist',
'node_modules',
],
coverage: {
enabled: true,
provider: 'v8',
reporter: [
'text',
'html',
],
thresholds: {
lines: 90,
functions: 90,
branches: 80,
statements: 90,
},
},
clearMocks: true,
restoreMocks: true,
threads: true,
testTimeout: 5000,
hookTimeout: 10000,
reporters: [
'default',
'html',
],
allowOnly: false,
},
})
test: {
globals: true,
environment: 'jsdom',
setupFiles: ['./tests/setup.ts'],
css: true,
coverage: {
provider: 'v8',
},
}
test: {
globals: false,
environment: 'node',
threads: false,
isolate: true,
}
test: {
watch: false,
allowOnly: false,
reporters: [
'default',
'junit',
],
coverage: {
enabled: true,
},
}