TestCase
La clase TestCase
representa una prueba individual. Esta clase solo está disponible en el hilo principal. Para trabajar con tareas en tiempo de ejecución, consulta la "API de Runner".
Una instancia de TestCase
siempre tiene una propiedad type
con el valor test
. Puedes usarla para distinguir entre diferentes tipos de tareas:
if (task.type === 'test') {
task; // TestCase
}
project
Se refiere al TestProject
al que pertenece la prueba.
module
Es una referencia directa al TestModule
donde se define la prueba.
name
Es el nombre de la prueba que se pasó a la función test
.
import { test } from 'vitest';
// [!code word:'the validation works correctly']
test('the validation works correctly', () => {
// ...
});
fullName
El nombre completo de la prueba, incluyendo todas las suites padre, separadas por el símbolo >
. Por ejemplo, esta prueba tiene el nombre completo "the validation logic > the validation works correctly":
import { describe, test } from 'vitest';
// [!code word:'the validation works correctly']
// [!code word:'the validation logic']
describe('the validation logic', () => {
test('the validation works correctly', () => {
// ...
});
});
id
Es el ID único de la prueba. Este ID es determinista y será el mismo para la misma prueba en múltiples ejecuciones. El ID se basa en el nombre del proyecto, el ID del módulo y el orden de la prueba.
El formato del ID es el siguiente:
1223128da3_0_0
^^^^^^^^^^ hash del archivo
^ índice de la suite
^ índice de la prueba
TIP
Puedes generar el hash del archivo con la función generateFileHash
de vitest/node
, disponible a partir de Vitest 3:
import { generateFileHash } from 'vitest/node';
const hash = generateFileHash(
'/file/path.js', // ruta relativa
undefined // el nombre del proyecto o `undefined` si no se ha establecido
);
DANGER
No intentes analizar el ID. Puede comenzar con un signo menos: -1223128da3_0_0_0
.
location
Ubicación en el módulo donde se definió la prueba. Las ubicaciones solo se recopilan si includeTaskLocation
está habilitado en la configuración. Ten en cuenta que esta opción se habilita automáticamente si se utilizan las banderas --reporter=html
, --ui
o --browser
.
La ubicación de esta prueba será { line: 3, column: 1 }
:
import { test } from 'vitest'
test('the validation works correctly', () => {
// ...
})
parent
La Suite padre. Si la prueba se llamó directamente dentro del módulo, el padre será el propio módulo.
options
interface TaskOptions {
readonly each: boolean | undefined;
readonly fails: boolean | undefined;
readonly concurrent: boolean | undefined;
readonly shuffle: boolean | undefined;
readonly retry: number | undefined;
readonly repeats: number | undefined;
readonly mode: 'run' | 'only' | 'skip' | 'todo';
}
Opciones con las que se recopiló la prueba.
ok
function ok(): boolean;
Verifica si la prueba no falló en la suite. Si la prueba aún no ha terminado o fue omitida, devolverá true
.
meta
function meta(): TaskMeta;
Metadatos personalizados que se adjuntaron a la prueba durante su ejecución. Los metadatos pueden adjuntarse asignando una propiedad al objeto ctx.task.meta
durante la ejecución de una prueba:
import { test } from 'vitest';
test('the validation works correctly', ({ task }) => {
// ...
task.meta.decorated = false;
});
Si la prueba no ha terminado de ejecutarse, el objeto de metadatos estará vacío.
result
function result(): TestResult;
Resultados de la prueba. Si la prueba aún no ha terminado o acaba de ser recopilada, tendrá el valor TestResultPending
:
export interface TestResultPending {
/**
* La prueba se recopiló, pero aún no ha terminado de ejecutarse.
*/
readonly state: 'pending';
/**
* Las pruebas en estado pendiente no tienen errores.
*/
readonly errors: undefined;
}
Si la prueba fue omitida, el valor de retorno será TestResultSkipped
:
interface TestResultSkipped {
/**
* La prueba fue omitida con la bandera `skip` o `todo`.
* Puedes ver cuál se utilizó en la opción `options.mode`.
*/
readonly state: 'skipped';
/**
* Las pruebas omitidas no tienen errores.
*/
readonly errors: undefined;
/**
* Una nota personalizada que se pasó a `ctx.skip(note)`.
*/
readonly note: string | undefined;
}
TIP
Si la prueba se omitió porque otra prueba tiene la bandera only
, options.mode
será igual a skip
.
Si la prueba falló, el valor de retorno será TestResultFailed
:
interface TestResultFailed {
/**
* La prueba falló al ejecutarse.
*/
readonly state: 'failed';
/**
* Errores que se produjeron durante la ejecución de la prueba.
*/
readonly errors: ReadonlyArray<TestError>;
}
Si la prueba pasó, el valor de retorno será TestResultPassed
:
interface TestResultPassed {
/**
* La prueba pasó con éxito.
*/
readonly state: 'passed';
/**
* Errores que se lanzaron durante la ejecución de la prueba.
*/
readonly errors: ReadonlyArray<TestError> | undefined;
}
WARNING
Ten en cuenta que una prueba con estado passed
aún puede presentar errores adjuntos; esto puede ocurrir si retry
se activó al menos una vez.
diagnostic
function diagnostic(): TestDiagnostic | undefined;
Información útil sobre la prueba, como la duración, el uso de memoria, etc.:
interface TestDiagnostic {
/**
* Si la duración de la prueba supera `slowTestThreshold`.
*/
readonly slow: boolean;
/**
* La memoria utilizada por la prueba en bytes.
* Este valor solo está disponible si la prueba se ejecutó con la bandera `logHeapUsage`.
*/
readonly heap: number | undefined;
/**
* El tiempo de ejecución de la prueba en ms.
*/
readonly duration: number;
/**
* El tiempo de inicio de la prueba en ms.
*/
readonly startTime: number;
/**
* El número de veces que se reintentó la prueba.
*/
readonly retryCount: number;
/**
* El número de veces que se repitió la prueba según la opción `repeats`.
* Este valor puede ser menor si la prueba falló durante la repetición y no se configuró `retry`.
*/
readonly repeatCount: number;
/**
* Si la prueba pasó al segundo intento.
*/
readonly flaky: boolean;
}
INFO
diagnostic()
devolverá undefined
si la prueba aún no se ha programado para ejecutarse.