Reportes
Vitest ofrece varios reportes integrados para visualizar los resultados de las pruebas en distintos formatos, además de la posibilidad de utilizar reportes personalizados. Puede seleccionar diferentes reportes mediante la opción de línea de comandos --reporter o incluyendo una propiedad reporters en su archivo de configuración. Si no se especifica ningún reporte, Vitest utilizará el reporte default como se describe a continuación.
Uso de reportes desde la línea de comandos:
npx vitest --reporter=verboseUso de reportes mediante vitest.config.ts:
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
reporters: ['verbose'],
},
});Algunos reportes pueden personalizarse pasándoles opciones adicionales. Las opciones específicas de cada reporte se detallan en las secciones siguientes.
export default defineConfig({
test: {
reporters: ['default', ['junit', { suiteName: 'UI tests' }]],
},
});Salida de los reportes
Por defecto, los reportes de Vitest imprimirán su salida en la terminal. Al usar los reportes json, html o junit, puede escribir la salida de sus pruebas en un archivo incluyendo la opción de configuración outputFile en su archivo de configuración de Vite o a través de la CLI.
npx vitest --reporter=json --outputFile=./test-output.jsonexport default defineConfig({
test: {
reporters: ['json'],
outputFile: './test-output.json',
},
});Combinación de reportes
Puede utilizar varios reportes simultáneamente para imprimir los resultados de sus pruebas en diferentes formatos. Por ejemplo:
npx vitest --reporter=json --reporter=defaultexport default defineConfig({
test: {
reporters: ['json', 'default'],
outputFile: './test-output.json',
},
});El ejemplo anterior imprimirá los resultados de la prueba en la terminal con el estilo predeterminado y los escribirá como JSON en el archivo de salida designado.
Al usar varios reportes, también es posible designar múltiples archivos de salida, de la siguiente manera:
export default defineConfig({
test: {
reporters: ['junit', 'json', 'verbose'],
outputFile: {
junit: './junit-report.xml',
json: './json-report.json',
},
},
});Este ejemplo escribirá reportes JSON y XML separados, además de imprimir un reporte detallado en la terminal.
Reportes integrados
Reporte predeterminado
Por defecto (es decir, si no se especifica ningún reporte), Vitest mostrará un resumen de las pruebas en ejecución y su estado en la parte inferior. Una vez que un conjunto de pruebas finaliza, su estado se mostrará en la parte superior del resumen.
Puede deshabilitar el resumen configurando el reporte:
export default defineConfig({
test: {
reporters: [['default', { summary: false }]],
},
});Ejemplo de salida para pruebas en curso:
✓ test/example-1.test.ts (5 tests | 1 skipped) 306ms
✓ test/example-2.test.ts (5 tests | 1 skipped) 307ms
❯ test/example-3.test.ts 3/5
❯ test/example-4.test.ts 1/5
Test Files 2 passed (4)
Tests 10 passed | 3 skipped (65)
Start at 11:01:36
Duration 2.00sSalida final después de que las pruebas hayan terminado:
✓ test/example-1.test.ts (5 tests | 1 skipped) 306ms
✓ test/example-2.test.ts (5 tests | 1 skipped) 307ms
✓ test/example-3.test.ts (5 tests | 1 skipped) 307ms
✓ test/example-4.test.ts (5 tests | 1 skipped) 307ms
Test Files 4 passed (4)
Tests 16 passed | 4 skipped (20)
Start at 12:34:32
Duration 1.26s (transform 35ms, setup 1ms, collect 90ms, tests 1.47s, environment 0ms, prepare 267ms)Reporte básico
El reportero basic es equivalente al reportero default sin summary.
npx vitest --reporter=basicexport default defineConfig({
test: {
reporters: ['basic'],
},
});Ejemplo de salida usando el reporte básico:
✓ __tests__/file1.test.ts (2) 725ms
✓ __tests__/file2.test.ts (2) 746ms
Test Files 2 passed (2)
Tests 4 passed (4)
Start at 12:34:32
Duration 1.26s (transform 35ms, setup 1ms, collect 90ms, tests 1.47s, environment 0ms, prepare 267ms)Reporte detallado
El reporte detallado es el mismo que el reporte default, pero también muestra cada prueba individual después de que el conjunto de pruebas ha terminado. También muestra las pruebas que se están ejecutando actualmente y que están tardando más de slowTestThreshold. Similar al reporte default, puede deshabilitar el resumen configurando el reporte.
npx vitest --reporter=verboseexport default defineConfig({
test: {
reporters: [['verbose', { summary: false }]],
},
});Ejemplo de salida para pruebas en curso con slowTestThreshold: 300 predeterminado:
✓ __tests__/example-1.test.ts (2) 725ms
✓ first test file (2) 725ms
✓ 2 + 2 should equal 4
✓ 4 - 2 should equal 2
❯ test/example-2.test.ts 3/5
↳ should run longer than three seconds 1.57s
❯ test/example-3.test.ts 1/5
Test Files 2 passed (4)
Tests 10 passed | 3 skipped (65)
Start at 11:01:36
Duration 2.00sEjemplo de salida final de la terminal para un conjunto de pruebas que pasa:
✓ __tests__/file1.test.ts (2) 725ms
✓ first test file (2) 725ms
✓ 2 + 2 should equal 4
✓ 4 - 2 should equal 2
✓ __tests__/file2.test.ts (2) 746ms
✓ second test file (2) 746ms
✓ 1 + 1 should equal 2
✓ 2 - 1 should equal 1
Test Files 2 passed (2)
Tests 4 passed (4)
Start at 12:34:32
Duration 1.26s (transform 35ms, setup 1ms, collect 90ms, tests 1.47s, environment 0ms, prepare 267ms)Reporte de puntos
Imprime un solo punto por cada prueba completada para proporcionar una salida mínima a la vez que muestra todas las pruebas que se han ejecutado. Los detalles solo se proporcionan para las pruebas fallidas, junto con el resumen del reporte basic para el conjunto de pruebas.
npx vitest --reporter=dotexport default defineConfig({
test: {
reporters: ['dot'],
},
});Ejemplo de salida de la terminal para un conjunto de pruebas que pasa:
....
Test Files 2 passed (2)
Tests 4 passed (4)
Start at 12:34:32
Duration 1.26s (transform 35ms, setup 1ms, collect 90ms, tests 1.47s, environment 0ms, prepare 267ms)Reporte JUnit
Genera un reporte de los resultados de la prueba en formato XML de JUnit. Se puede imprimir en la terminal o escribir en un archivo XML usando la opción de configuración outputFile.
npx vitest --reporter=junitexport default defineConfig({
test: {
reporters: ['junit'],
},
});Ejemplo de un reporte XML de JUnit:
<?xml version="1.0" encoding="UTF-8" ?>
<testsuites name="vitest tests" tests="2" failures="1" errors="0" time="0.503">
<testsuite name="__tests__/test-file-1.test.ts" timestamp="2023-10-19T17:41:58.580Z" hostname="My-Computer.local" tests="2" failures="1" errors="0" skipped="0" time="0.013">
<testcase classname="__tests__/test-file-1.test.ts" name="first test file > 2 + 2 should equal 4" time="0.01">
<failure message="expected 5 to be 4 // Object.is equality" type="AssertionError">
AssertionError: expected 5 to be 4 // Object.is equality
❯ __tests__/test-file-1.test.ts:20:28
</failure>
</testcase>
<testcase classname="__tests__/test-file-1.test.ts" name="first test file > 4 - 2 should equal 2" time="0">
</testcase>
</testsuite>
</testsuites>El XML de salida contiene etiquetas testsuites y testcase anidadas. Estas también se pueden personalizar a través de las opciones del reporte suiteName y classnameTemplate. classnameTemplate puede ser una cadena de plantilla o una función.
Los marcadores de posición admitidos para la opción classnameTemplate son:
- filename (nombre de archivo)
- filepath (ruta de archivo)
export default defineConfig({
test: {
reporters: [
[
'junit',
{
suiteName: 'custom suite name',
classnameTemplate: 'filename:{filename} - filepath:{filepath}',
},
],
],
},
});Reporte JSON
Genera un reporte de los resultados de la prueba en un formato JSON compatible con la opción --json de Jest. Se puede imprimir en la terminal o escribir en un archivo usando la opción de configuración outputFile.
npx vitest --reporter=jsonexport default defineConfig({
test: {
reporters: ['json'],
},
});Ejemplo de un reporte JSON:
{
"numTotalTestSuites": 4,
"numPassedTestSuites": 2,
"numFailedTestSuites": 1,
"numPendingTestSuites": 1,
"numTotalTests": 4,
"numPassedTests": 1,
"numFailedTests": 1,
"numPendingTests": 1,
"numTodoTests": 1,
"startTime": 1697737019307,
"success": false,
"testResults": [
{
"assertionResults": [
{
"ancestorTitles": ["", "first test file"],
"fullName": " first test file 2 + 2 should equal 4",
"status": "failed",
"title": "2 + 2 should equal 4",
"duration": 9,
"failureMessages": ["expected 5 to be 4 // Object.is equality"],
"location": {
"line": 20,
"column": 28
},
"meta": {}
}
],
"startTime": 1697737019787,
"endTime": 1697737019797,
"status": "failed",
"message": "",
"name": "/root-directory/__tests__/test-file-1.test.ts"
}
],
"coverageMap": {}
}INFO
Desde Vitest 3, el reporte JSON incluye información de cobertura en coverageMap si la cobertura está habilitada.
Reporte HTML
Genera un archivo HTML para ver los resultados de las pruebas a través de una GUI interactiva. Una vez que se ha generado el archivo, Vitest mantendrá un servidor de desarrollo local en ejecución y proporcionará un enlace para ver el reporte en un navegador.
El archivo de salida se puede especificar usando la opción de configuración outputFile. Si no se proporciona la opción outputFile, se creará un nuevo archivo HTML.
npx vitest --reporter=htmlexport default defineConfig({
test: {
reporters: ['html'],
},
});TIP
Este reporte requiere el paquete @vitest/ui instalado.
Reporte TAP
Genera un reporte siguiendo el Protocolo de Prueba de Cualquier Cosa (TAP).
npx vitest --reporter=tapexport default defineConfig({
test: {
reporters: ['tap'],
},
});Ejemplo de un reporte TAP:
TAP version 13
1..1
not ok 1 - __tests__/test-file-1.test.ts # time=14.00ms {
1..1
not ok 1 - first test file # time=13.00ms {
1..2
not ok 1 - 2 + 2 should equal 4 # time=11.00ms
---
error:
name: "AssertionError"
message: "expected 5 to be 4 // Object.is equality"
at: "/root-directory/__tests__/test-file-1.test.ts:20:28"
actual: "5"
expected: "4"
...
ok 2 - 4 - 2 should equal 2 # time=1.00ms
}
}Reporte TAP plano
Genera un reporte TAP plano. Al igual que el reporte tap, los resultados de las pruebas se formatean para seguir los estándares TAP, pero los conjuntos de pruebas se formatean como una lista plana en lugar de una jerarquía anidada.
npx vitest --reporter=tap-flatexport default defineConfig({
test: {
reporters: ['tap-flat'],
},
});Ejemplo de un reporte TAP plano:
TAP version 13
1..2
not ok 1 - __tests__/test-file-1.test.ts > first test file > 2 + 2 should equal 4 # time=11.00ms
---
error:
name: "AssertionError"
message: "expected 5 to be 4 // Object.is equality"
at: "/root-directory/__tests__/test-file-1.test.ts:20:28"
actual: "5"
expected: "4"
...
ok 2 - __tests__/test-file-1.test.ts > first test file > 4 - 2 should equal 2 # time=0.00msReporte de procesos bloqueados
Muestra una lista de procesos bloqueados, si los hay, que impiden que Vitest finalice de forma segura. El reporte hanging-process no muestra los resultados de las pruebas por sí mismo, pero se puede usar junto con otro reporte para monitorear los procesos mientras se ejecutan las pruebas. El uso de este reporte puede consumir muchos recursos, por lo que generalmente debe reservarse para fines de depuración en situaciones en las que Vitest no puede salir del proceso de forma consistente.
npx vitest --reporter=hanging-processexport default defineConfig({
test: {
reporters: ['hanging-process'],
},
});Reporte de GitHub Actions
Genera comandos de flujo de trabajo para proporcionar anotaciones para los fallos de las pruebas. Este reporte se habilita automáticamente con un reporte default cuando process.env.GITHUB_ACTIONS === 'true'.
Si configura reportes no predeterminados, debe agregar explícitamente github-actions.
export default defineConfig({
test: {
reporters: process.env.GITHUB_ACTIONS ? ['dot', 'github-actions'] : ['dot'],
},
});Puede personalizar las rutas de archivo que se imprimen en el formato de comando de anotación de GitHub usando la opción onWritePath. Esto es útil cuando se ejecuta Vitest en un entorno en contenedores, como Docker, donde las rutas de archivo pueden no coincidir con las rutas en el entorno de GitHub Actions.
export default defineConfig({
test: {
reporters: process.env.GITHUB_ACTIONS
? [
'default',
[
'github-actions',
{
onWritePath(path) {
return path.replace(
/^\/app\//,
`${process.env.GITHUB_WORKSPACE}/`
);
},
},
],
]
: ['default'],
},
});Reporte Blob
Almacena los resultados de las pruebas en la máquina para que puedan fusionarse más tarde usando el comando --merge-reports. Por defecto, almacena todos los resultados en la carpeta .vitest-reports, pero se puede anular con las banderas --outputFile o --outputFile.blob.
npx vitest --reporter=blob --outputFile=reports/blob-1.jsonRecomendamos usar este reporte si está ejecutando Vitest en diferentes máquinas con la bandera --shard. Todos los reportes blob se pueden fusionar en cualquier reporte usando el comando --merge-reports al final de su pipeline de CI:
npx vitest --merge-reports=reports --reporter=json --reporter=defaultTIP
Tanto --reporter=blob como --merge-reports no funcionan en modo de observación.
Reportes personalizados
Puede usar reportes personalizados de terceros instalados desde NPM especificando su nombre de paquete en la opción de reportes:
npx vitest --reporter=some-published-vitest-reporterexport default defineConfig({
test: {
reporters: ['some-published-vitest-reporter'],
},
});Además, puede definir sus propios reportes personalizados y usarlos especificando su ruta de archivo:
npx vitest --reporter=./path/to/reporter.tsLos reportes personalizados deben implementar la interfaz Reporter.