Vitest
Set up test analytics for Vitest projects.
Everr parses verbose Vitest output to track individual test results, detect flaky tests, and analyze failures.
Setup
Run Vitest with the verbose reporter so that individual test results are printed:
vitest run --reporter=verboseOr configure it in your vitest.config.ts:
export default defineConfig({
test: {
reporters: ["verbose"],
},
});GitHub Actions workflow example
- name: Run tests
run: npx vitest run --reporter=verboseEverr automatically detects and parses Vitest verbose output from workflow logs.
What gets parsed
The parser recognizes Vitest verbose reporter output patterns (after stripping ANSI color codes):
| Pattern | Meaning |
|---|---|
✓ filepath > describe > test 42ms | Test passed |
× filepath > describe > test 15ms | Test failed |
↓ filepath > describe > test | Test skipped |
Describe block hierarchy
Vitest uses the > separator to represent the test hierarchy: file path, describe blocks, and test name. For example:
✓ src/utils.test.ts > parseConfig > handles empty input 3msThis is parsed as:
- Package:
src/utils.test.ts - Describe block:
parseConfig - Test name:
handles empty input
Nested describe blocks are automatically detected. Describe nodes get everr.test.is_suite=true, nested entries get everr.test.is_subtest=true, and everr.test.parent_test points to the parent node. A nested describe block can therefore be both a suite and a subtest.
Generated span attributes
| Attribute | Value |
|---|---|
everr.test.name | Full test name (e.g. parseConfig > handles empty input) |
everr.test.result | pass, fail, or skip |
everr.test.duration_seconds | Duration from the test output |
everr.test.framework | vitest |
everr.test.package | File path (e.g. src/utils.test.ts) |
everr.test.is_suite | true for describe blocks that contain child tests |
everr.test.is_subtest | true for tests within describe blocks |
everr.test.parent_test | Parent describe block name |