Ir al contenido

Vincular pruebas de Jest con casos

Cada resultado va a un caso de prueba de Probara. Una prueba que nombra su caso queda vinculada a él; una prueba que no nombra ninguno se asocia por su clave de automatización, y su caso se crea la primera vez que se reporta. Vincula las pruebas cuando sus casos ya existen en Probara (escritos a mano o importados).

FormaEjemploCuándo
Un ID de caso en el título de una prueba o describetest('SHOP-12 pays with a card', ...)La forma habitual; funciona también con omitidas
probara.id() en la pruebaprobara.id('SHOP-14'), probara.id(['A', 'B'])IDs que solo se conocen mientras corre la prueba
tests/checkout.test.js
const { probara } = require('@probara/jest-reporter');
describe('checkout', () => {
test('SHOP-12 pays with a card', () => {});
describe('SHOP-13 vouchers', () => {
test('pays with a voucher', () => {});
});
test('pays with a gift card', () => {
probara.id('SHOP-14');
});
test('shows the total', () => {
// No case named: matched by its key, created the first time.
});
});

Probara recibe un resultado por prueba, cada uno con su caso, y la clave que tendría sin los IDs:

[
{
"caseDisplayId": "SHOP-12",
"automationKey": "tests/checkout.test.js > checkout pays with a card"
},
{
"caseDisplayId": "SHOP-13",
"automationKey": "tests/checkout.test.js > checkout vouchers pays with a voucher"
},
{
"caseDisplayId": "SHOP-14",
"automationKey": "tests/checkout.test.js > checkout pays with a gift card"
},
{ "automationKey": "tests/checkout.test.js > checkout shows the total" }
]
  • Los IDs del título son los IDs del proyecto al que se reporta (y de los de projects) en el título de un describe o de una prueba, como SHOP-12 o SHOP_12, en cualquier posición. Un ID en un describe vincula todas las pruebas que contiene. Se eliminan de la clave, así que añadir uno nunca cambia una clave. Un ID de un proyecto que el reporter no conoce queda en el título, como texto.
  • probara.id() acepta un ID o una lista, y vincula el intento en curso. Una prueba omitida antes de ejecutarse (test.skip, un describe omitido, test.todo) nunca ejecuta su cuerpo: vincúlala con un ID en el título. La selección de pruebas tampoco ve probara.id(): decide antes de que se ejecute la prueba.

Los IDs son el ID visible del caso: el ID del Proyecto, un guion y el número que muestra Probara (SHOP-12). Un ID que Probara no conoce no se registra: el registro lo nombra como no encontrado (solución de problemas).

Cuentan todas las fuentes: primero probara.id() (en el orden de las llamadas) y después los IDs de los títulos, cada ID una vez. Una prueba vinculada a varios casos se envía una vez por caso, con la misma clave, y sus archivos se suben a cada resultado:

tests/login.test.js
const { probara } = require('@probara/jest-reporter');
test('SHOP-21 logs in', () => {
probara.id('SHOP-20');
});
[
{ "caseDisplayId": "SHOP-20", "automationKey": "tests/login.test.js > logs in" },
{ "caseDisplayId": "SHOP-21", "automationKey": "tests/login.test.js > logs in" }
]

Una prueba que no nombra ningún caso se asocia por su clave de automatización: la misma clave encuentra el mismo caso en cada ejecución, y una clave nueva crea un caso nuevo. La clave es la que probara import junit da a la prueba en el informe de jest-junit:

ParteDe dónde saleEjemplo
ArchivoEl archivo de prueba, relativo a rootDir (la ruta real del directorio en el que se ejecuta jest)tests/checkout.test.js
NombreLos títulos de los describe y el de la prueba, unidos por espacios, como los nombra jest-junit; sin IDscheckout pays

Así, tests/checkout.test.js > checkout pays es la clave de test('pays') dentro de describe('checkout'). Con keyIncludesFile: false se omite el archivo (checkout pays), como en el informe de jest-junit sin su atributo de archivo. El algoritmo de la clave es la clave de automatización v1 de @probara/core, congelada y compartida por todas las herramientas de Probara.

Cambia la clave, y por tanto crea un caso nuevoNo cambia la clave
Renombrar una prueba, un describe o un archivoAñadir o quitar un ID de caso en un título
Mover un archivoprobara.title() y probara.suite() (solo dan nombre a un caso creado)
Ejecutar jest desde otro directorio (define rootDir para mantener las rutas)probara.parameters()
Cambiar keyIncludesFileLa versión de Jest, una entrada de projects de Jest, el CI

El nombre es el de jest-junit, con sus plantillas por defecto, así que una clave nunca depende de cuál de las dos herramientas reportó la prueba:

  • Las filas de test.each son pruebas propias, con sus valores en el nombre: cada fila es un caso. Una tabla cuyas filas dan el mismo nombre (sin marcador en el título) produce pruebas que comparten una clave: se registran en el mismo caso.
  • $ en un título se interpreta como lo hacen las plantillas de jest-junit: $$ se convierte en $, y $& en el marcador que sustituyó. costs $$5 tiene la clave ... costs $5.
  • {displayName} en un título se convierte en el nombre del proyecto de Jest que ejecuta la prueba, como lo rellena jest-junit (proyectos de Jest).
  • › (con sus espacios) en un título lo divide en dos segmentos de la clave, igual que la importación JUnit divide los nombres de jest-junit.
tests/prices.test.js
describe('prices', () => {
test.each([
['EUR', '€'],
['USD', '$'],
])('shows %s as %s', () => {});
test('costs $$5 with a voucher', () => {});
});
[
{ "automationKey": "tests/prices.test.js > prices shows EUR as €" },
{ "automationKey": "tests/prices.test.js > prices shows USD as $" },
{ "automationKey": "tests/prices.test.js > prices costs $5 with a voucher" }
]

Dos pruebas de un mismo archivo con el mismo nombre completo (los mismos títulos de describe y el mismo título, o a b › c y a › b c) comparten una clave: Probara registra ambas en un caso, y lo que dijeron sus llamadas probara.* se omite, con una advertencia, en lugar de atribuirlo a la prueba equivocada (solución de problemas).

Una prueba cuya clave no coincide con ningún caso crea uno, con el nombre de la prueba (sin IDs), bajo suiteUlid (la raíz del proyecto por defecto), en una suite con el nombre de su archivo de prueba; con keyIncludesFile: false, con el de su describe más externo, si lo tiene. Con createMissingCases: false (PROBARA_CREATE_MISSING_CASES=false), una prueba así no registra nada y aparece como no encontrada: solo los casos existentes reciben resultados. probara.title() y probara.suite() eligen el nombre y la suite de un caso creado.

Un proyecto que enviaba el informe de jest-junit con probara import junit puede pasar al reporter y conservar cada caso: el reporter construye las mismas claves y lee los mismos IDs de los títulos.

Informe de jest-junitAjuste del reporter
Escrito con JEST_JUNIT_ADD_FILE_ATTRIBUTE=trueNada: keyIncludesFile está activado
Escrito sin el atributo de archivo (su valor por defecto)keyIncludesFile: false
Escrito con otras plantillas (classNameTemplate…)Claves distintas: vincula por IDs de caso

Sigue ejecutando jest desde el mismo directorio que antes: el archivo de una clave es relativo a él. La guía de migración desde JUnit tiene los pasos, cómo comparar las claves antes de cambiar, y qué registra el reporter de forma distinta.

Relacionado: Metadatos y enlaces · Sharding y proyectos · Actualizar el reporter · Fuente: linking.md