Solución de problemas del reporter de Jest
Cada entrada parte de lo que ves, y después explica por qué y qué hacer. El reporter escribe en
stderr en líneas [probara]; PROBARA_DEBUG=true añade cada petición. Sea cual sea
el problema, el código de salida de Jest sigue siendo el de las pruebas. La
última tabla enumera cada línea que registra el reporter.
No se reporta nada, y no se registra nada
Sección titulada «No se reporta nada, y no se registra nada»Por qué. Sin un token y un proyecto, el reporter queda desactivado y en silencio, a propósito: las ejecuciones locales y los builds de forks no envían nada. Solo lo indica en debug:
$ PROBARA_DEBUG=true npx jest[probara] Probara reporting is not configured: set PROBARA_API_TOKEN and PROBARA_PROJECT to enable itSolución. Pasa el secreto PROBARA_API_TOKEN al paso que ejecuta jest, y define el proyecto
(projectId o PROBARA_PROJECT). Comprueba que el reporter está en los reporters de la
configuración que usa Jest: --reporters en la línea de comandos sustituye los reporters de la
configuración, y una clave reporters dentro de uno de los projects de Jest se ignora (regístralo
en el nivel superior).
El envío está desactivado: un problema de configuración
Sección titulada «El envío está desactivado: un problema de configuración»$ PROBARA_RUN_ULID=R-12 npx jest[probara] Probara reporting is off: PROBARA_RUN_ULID is not a ULIDPor qué. Un ajuste tiene un valor incorrecto, o solo está definido uno de los dos, el token o el proyecto. Cada problema se registra, nombrando la opción o la variable afectada (nunca su valor), y no se envía nada.
Solución. Corrige el ajuste que nombra la línea (opciones).
Probara responde 401 o 403
Sección titulada «Probara responde 401 o 403»$ npx jest[probara] Sending 3 results of 3 tests (3 passed, 0 failed, 0 skipped, 0 blocked)[probara] 3 results were not sent: Probara answered 401 unauthorized: <message from Probara>. No run was created or updatedPor qué. 401: el token es incorrecto, está revocado o es de otro Probara (baseUrl). 403: el
token no puede reportar en ese proyecto, o la organización está en el plan Free (el envío desde CI
necesita un plan de pago).
Solución. Crea un token de aplicación nuevo desde la tarjeta Jest (primeros pasos) y actualiza el secreto; comprueba el ID del Proyecto; comprueba el plan de la organización.
La ejecución quedó abierta
Sección titulada «La ejecución quedó abierta»La línea de error termina con The run R-4 was left open: <url> o, cuando ni siquiera el primer
informe llegó, con No run was created or updated.
Por qué. Un informe falló tras sus reintentos (Probara inalcanzable, un informe rechazado): los
informes siguientes no se envían, y una ejecución que ya tiene resultados queda abierta, para que
nada parezca completo cuando no lo está. Una ejecución de una sesión watch y una ejecución
reutilizada (run.ulid) quedan abiertas a propósito.
Solución. Define un
archivo de resultados:
lo que no se envió va ahí, con la ejecución a la que pertenece, y probara import results lo envía a
esa ejecución y la cierra. Si no, cierra la ejecución a mano con
npx @probara/cli run close --run-ulid <ulid>, y vuelve a ejecutar las pruebas.
Un job envía después de cerrarse su ejecución
Sección titulada «Un job envía después de cerrarse su ejecución»En GitHub Actions los jobs de un mismo workflow comparten una ejecución, y un job final la cierra. Un
job que envía después de ese cierre recibe 409 ci_run_closed (la ejecución ya estaba cerrada): el
reporter registra el motivo, no envía nada más, y las pruebas conservan su código de salida.
Por qué. Un job que envía no está en el needs del job final, así que el job final cerró la
ejecución antes de que ese job enviara. O un job en paralelo cerró la ejecución al terminar porque no
tenía PROBARA_CLOSE_RUN: false, y los jobs posteriores reciben el mismo error.
Solución. Mantén cada job que envía en el needs del job final, y define PROBARA_CLOSE_RUN: false
en cada job en paralelo. La sección
jobs en paralelo
tiene el workflow completo.
Resultados no registrados (unmatched)
Sección titulada «Resultados no registrados (unmatched)»$ PROBARA_CREATE_MISSING_CASES=false npx jest --runInBand[probara] Sending 3 results of 3 tests (3 passed, 0 failed, 0 skipped, 0 blocked)[probara] Recorded 1 result (0 new cases, 2 unmatched) in R-1 (closed): https://app.probara.net/projects/SHOP/runs/R-1[probara] 2 results were not recorded (case_not_found): tests/cart.test.js > cart removes an item; tests/login.test.js > login logs in with a valid passwordPor qué. Un resultado nombra un caso que no existe (una errata en un ID, un caso de otro
proyecto), o no coincide con ningún caso mientras createMissingCases está desactivado. Probara
registra los demás e indica cuáles se omitieron, con el motivo.
Solución. Corrige el ID, crea el caso, o deja que el reporter cree los casos que faltan (el valor por defecto).
Cada ejecución crea casos nuevos
Sección titulada «Cada ejecución crea casos nuevos»Por qué. Las claves de automatización cambiaron: se renombró o movió una prueba, un describe o
un archivo, jest se ejecuta desde otro directorio que antes (las claves son relativas a él), o
cambió keyIncludesFile
(qué cambia una clave). Si
vienes de probara import junit, el informe de jest-junit puede haberse escrito sin el atributo de
archivo, o con otras plantillas.
Solución. Nombra los casos en los títulos
(vincular), para que un cambio de nombre los conserve.
Define rootDir cuando jest se ejecute desde directorios distintos. Antes de una refactorización,
compara las claves; si vienes de la importación JUnit, consulta
migrar desde la importación JUnit.
Un archivo de prueba no se reporta
Sección titulada «Un archivo de prueba no se reporta»$ npx jest[probara] Could not report tests/totals.test.js: Jest could not run it (Cannot find module '../src/totals' from 'tests/totals.test.js')Por qué. Jest no pudo ejecutar el archivo (un error de sintaxis, una importación que lanza un error, un módulo que falta): no tiene pruebas que reportar. El motivo entre paréntesis es la primera línea del error de Jest.
Solución. Corrige el archivo; la salida del propio Jest, encima de las líneas [probara],
muestra el error completo. Un hook afterAll que lanza un error es distinto: sus pruebas se
reportan, con un resultado fallido más
(estados).
Un helper advierte que solo funciona mientras corre una prueba
Sección titulada «Un helper advierte que solo funciona mientras corre una prueba»Por qué. Se llamó a un helper probara.* fuera de una prueba: al principio de un archivo, en el
cuerpo de un describe, en beforeAll o en afterAll. No se registra nada, y la prueba continúa.
Solución. Llámalo en la prueba, en beforeEach o en afterEach
(dónde llamar a los helpers).
Los helpers no registran nada
Sección titulada «Los helpers no registran nada»| Ves | Por qué, y qué hacer |
|---|---|
probara.* needs jest-circus, Jest's default test runner: ... | La configuración define testRunner con otro runner (jest-jasmine2). Quítalo: jest-circus es el de Jest por defecto |
| Ninguna advertencia, y ni pasos, ni archivos, ni metadatos en un archivo de prueba | El archivo simula fs (jest.mock('fs')), con el que escriben los helpers. Simula en su lugar los módulos que importa tu código |
| Ninguna advertencia, y nada en ningún archivo | El envío está desactivado (sin token, enabled: false): los helpers no hacen nada, y probara.step() sigue ejecutando su cuerpo |
The probara.* helpers are off: could not create their channel: ... | No se puede escribir en el directorio temporal del sistema. Apunta TMPDIR a una carpeta con permisos de escritura |
Una prueba perdió sus pasos o archivos
Sección titulada «Una prueba perdió sus pasos o archivos»const { probara } = require('@probara/jest-reporter');
test.each([1, 2])('rounds the total', (items) => { probara.parameters({ items });});$ npx jest[probara] Several tests of one file have the same full name and attempt: what the probara.* helpers said about them is left out (first seen in tests/prices.test.js › rounds the total; repeats are logged at debug)[probara] Sending 2 results of 1 test (2 passed, 0 failed, 0 skipped, 0 blocked)[probara] Recorded 2 results (1 new case, 0 unmatched) in R-1 (closed): https://app.probara.net/projects/SHOP/runs/R-1Se envían ambas filas, en un solo caso, sin sus parámetros.
Por qué. El reporter asocia lo que dijeron los helpers a un intento por su archivo de prueba, su
nombre completo (los títulos de los describe y el título, unidos por espacios) y su número de
intento. Cuando eso no basta para distinguir dos intentos, omite sus detalles en lugar de atribuirlos
a la prueba equivocada:
- Dos pruebas de un archivo con el mismo nombre completo: un título de
test.eachsin marcador (como arriba), el mismo título dos veces, oa b›cjunto aa›b c. - Un archivo que dos proyectos de Jest ejecutaron al mismo tiempo: el registro dice
Several Jest projects ran this file at once(proyectos de Jest). - Una prueba
test.concurrentreintentada en Jest 30.0 a 30.4: las llamadas de sus reintentos van a su primer intento.
Solución. Da a cada prueba de un archivo su propio nombre (marcadores de test.each: %s,
$name), da a los proyectos de Jest sus propios archivos, o actualiza Jest a 30.5.
La selección ejecutó todas las pruebas
Sección titulada «La selección ejecutó todas las pruebas»Por qué. Con runCasesOnly, el reporter no pudo saber qué pruebas pertenecen a la ejecución, así
que todas las pruebas se ejecutaron y se reportaron, en lugar de ninguna. Una advertencia dice por
qué: no hay PROBARA_RUN_ULID, los casos de la ejecución no se pudieron leer (un ULID incorrecto, un
token de otra organización), falta el archivo de setup en la configuración de Jest (o en uno de sus
projects), o no pudo omitir pruebas en un archivo (otro testRunner).
Solución. Sigue la advertencia (cuando no puede seleccionar). Si en cambio se omitieron todas las pruebas, ninguna pertenece a la ejecución: comprueba el ULID, y que las pruebas nombren los casos de la ejecución o tengan sus claves.
captureOutput no adjunta nada
Sección titulada «captureOutput no adjunta nada»Por qué. Falta el archivo de setup (una advertencia lo indica), o la salida es de un tipo que no
captura: process.stdout.write, console.table y similares, pruebas test.concurrent, un
afterEach de nivel superior del archivo de prueba, un método de consola que la prueba simuló, o
salida fuera de una prueba
(salida de consola).
Solución. Añade setupFilesAfterEnv: ['@probara/jest-reporter/setup'] a la configuración (a
cada proyecto de Jest), y escribe con console.log, info, debug, warn o error dentro de la
prueba, de un beforeEach o del afterEach de un bloque describe.
Falta un adjunto
Sección titulada «Falta un adjunto»Por qué. El registro nombra cada archivo que omitió y por qué: más de 32 MiB, una imagen de más
de 10 MiB o de 8192 px, un tipo de contenido rechazado, más de 20 archivos en un resultado, o un
archivo que probara.attach() no pudo leer cuando se llamó
(límites). Un
archivo adjuntado dentro de un paso va a ese paso, no al resultado.
Solución. Adjunta un archivo que exista cuando llamas a probara.attach() (se copia en el
momento), mantén los archivos dentro de los límites, y adjunta menos archivos por resultado.
Probara responde 429 (demasiadas peticiones)
Sección titulada «Probara responde 429 (demasiadas peticiones)»Por qué. El límite de peticiones de la organización (60 peticiones por minuto en Free, 1.200 en Pro y 3.000 en Enterprise) lo comparten todos los tokens y pipelines. Los adjuntos cuestan dos peticiones por resultado (límite de peticiones).
Solución. El reporter espera y reintenta por su cuenta. En baterías grandes, adjunta menos,
reduce attachmentConcurrency o reparte en el tiempo los pipelines con sharding.
Depuración
Sección titulada «Depuración»El registro
Sección titulada «El registro»El reporter solo escribe en stderr, con cada línea precedida de [probara]; el resto de la
terminal pertenece a los reporters del propio Jest (default, summary…). Una ejecución que
reporta registra dos líneas:
$ npx jest[probara] Sending 3 results of 3 tests (3 passed, 0 failed, 0 skipped, 0 blocked)[probara] Recorded 3 results (2 new cases, 0 unmatched) in R-1 (closed): https://app.probara.net/projects/SHOP/runs/R-1| Línea | Qué dice |
|---|---|
Sending N results of M tests (...) | Antes de enviar nada: un resultado por intento y caso, por estado después de statusMapping, y lo que se dejó fuera |
Recorded N results (...) in R-1 | Por ejecución: lo que registró Probara, los casos que creó, los resultados que no pudo asociar, y el enlace |
N results were not recorded (...) | Los resultados no asociados, por motivo, con sus casos o claves |
Attached N files to results (...) | Subidas: adjuntados, omitidos y fallidos |
N results were not sent: ... | Un informe fallido: el motivo, y la ejecución que quedó abierta |
Wrote ... to <file> | Lo que fue al archivo de resultados |
Ran only the tests of run <ULID>: ... | Selección de pruebas: cuántas pruebas coincidieron con los casos de la ejecución, y cuántas se omitieron y quedaron fuera |
Watch mode: every re-run reports into R-1 of SHOP, ... | Modo watch: la única ejecución de la sesión, que queda abierta, y el comando que la cierra |
Could not report <file>: Jest could not run it (...) | Un archivo de prueba que no se pudo cargar: no tiene pruebas que reportar |
Probara reporting is off: ... | Un problema de configuración: no se envía nada |
Una advertencia que se repite en cada prueba (una llamada probara.* mal formada, un adjunto
omitido, un archivo de prueba sin el archivo de setup) se registra la primera vez, indicando dónde se
vio primero, con (first seen in <file or test>; repeats are logged at debug), y en debug a partir
de entonces. El token nunca aparece en ninguna línea, aunque la respuesta de Probara lo repita.
PROBARA_DEBUG
Sección titulada «PROBARA_DEBUG»debug: true (PROBARA_DEBUG=true) añade una línea por cada petición (método, ruta, estado, tiempo)
y cada reintento, las repeticiones de las advertencias, e indica por qué el envío está desactivado
cuando lo está:
PROBARA_DEBUG=true npx jestMantenlo desactivado en las ejecuciones normales: es muy detallado, aunque nunca registra el token ni los cuerpos.
Comprobar qué se enviaría
Sección titulada «Comprobar qué se enviaría»El reporter no tiene un modo de simulación propio, pero un archivo de resultados cumple esa función: ejecuta las pruebas con el envío desactivado y un archivo de resultados, y deja que la CLI muestre lo que enviaría. No llega nada a Probara, y no hace falta token:
$ PROBARA_ENABLED=false PROBARA_PROJECT=SHOP PROBARA_RESULTS_FILE=probara-results.json npx jest --runInBand[probara] Wrote 3 results to /work/shop/probara-results.json: send them with probara import results /work/shop/probara-results.json$ npx @probara/cli import results probara-results.json --dry-runpassed SHOP-12 tests/cart.test.js > cart adds an itempassed - tests/cart.test.js > cart removes an itempassed - tests/login.test.js > login logs in with a valid passwordTotal: 3 results from 1 file (3 passed, 0 failed, 0 skipped, 0 blocked)El primer comando escribe en stderr; la simulación imprime en stdout, una línea por resultado, en el
orden en que se escribieron los resultados (--runInBand lo mantiene igual entre ejecuciones): el
estado, el caso (- si no se nombra ninguno) y la clave de automatización. --dry-run nunca toca el
archivo; bórralo después, o impórtalo de verdad (un archivo que queda ahí hace que la siguiente
ejecución escriba probara-results-2.json). --json imprime en su lugar el documento completo, cada
entrada tal como la recibiría Probara
(probara import results).
Úsalo para comparar claves antes de una refactorización, una actualización o un cambio de
keyIncludesFile: escribe un archivo por ejecución, y compara las dos simulaciones con diff. Da a
cada ejecución su propio nombre de archivo y empieza sin ellos: si ya hay un archivo en la ruta, una
ejecución escribe en un hermano (before-2.json) y la simulación de before.json mostraría una
ejecución anterior, ocultando la diferencia.
rm -f before.json after.jsonPROBARA_ENABLED=false PROBARA_PROJECT=SHOP PROBARA_RESULTS_FILE=before.json npx jest# Change the code, or upgrade the reporter, then:PROBARA_ENABLED=false PROBARA_PROJECT=SHOP PROBARA_RESULTS_FILE=after.json npx jestnpx @probara/cli import results before.json --dry-run > before.txtnpx @probara/cli import results after.json --dry-run > after.txtdiff before.txt after.txtCualquier línea que cambió es una prueba cuya clave o cuyo vínculo con un caso cambió: recibiría un caso nuevo.
Cada línea que registra el reporter
Sección titulada «Cada línea que registra el reporter»Las líneas propias del reporter, además de las de la biblioteca de reporte que comparte con el
reporter de Playwright y la CLI
(Sending, Recorded, not sent, Wrote, Attached, Probara warned):
| Línea | Nivel | Dónde mirar |
|---|---|---|
Ignored the unknown option "<name>" of @probara/jest-reporter | warn | Opciones desconocidas: una errata |
Probara reporting is off: the reporter could not start: <reason> | error | Repórtalo: el reporter nunca lanza errores dentro de Jest, y dice por qué se detuvo |
Could not report <file>: Jest could not run it (<reason>) | warn | Un archivo de prueba no se reporta |
captureOutput needs the setup file: ... | warn | captureOutput no adjunta nada |
runCasesOnly needs the setup file: ... | warn | La selección ejecutó todas las pruebas |
runCasesOnly needs the run whose tests to run: ... | warn | La selección ejecutó todas las pruebas |
runCasesOnly: could not read the cases of the run <ULID> (<reason>). ... | warn | La selección ejecutó todas las pruebas |
runCasesOnly: the setup file could not skip the tests of a file ... (<reason>). ... | warn | La selección ejecutó todas las pruebas |
Ran only the tests of run <ULID>: <k> of <m> tests match its cases; ... | info | Selección de pruebas |
No test matches the cases of the run <ULID>: ... | warn | La selección ejecutó todas las pruebas |
Watch mode: every re-run reports into <run> of <project>, which stays open: ... | info | Modo watch |
The run <run> of <project> was closed: ... (o deleted) | info | Cuando se cierra la ejecución durante la sesión |
Several Jest projects ran this file at once: ... | warn | Una prueba perdió sus pasos o archivos |
Several tests of one file have the same full name and attempt: ... | warn | Una prueba perdió sus pasos o archivos |
The probara.* helpers are off: could not create their channel: <reason> | error | Los helpers no registran nada |
probara.<helper>() only works while a test runs (...) | warn | Dónde llamar a los helpers |
probara.* needs jest-circus, Jest's default test runner: ... | warn | Los helpers no registran nada |
probara.<helper>() takes ..., probara.attach() could not attach "<name>": <reason> | warn | Un argumento incorrecto; la llamada se ignora (metadatos) |
Dropped the issues of probara.issue(): no issueUrlTemplate turns their ids into links | warn | Enlaces e incidencias |
Could not report an attempt of "<test>": <reason>, Could not follow ..., Could not finish reporting: ... | error | Repórtalo: un intento que el reporter no pudo leer se pierde, y la ejecución continúa |
Reporta un problema en
github.com/cynch-me/probara-sdk/issues, con las
líneas [probara] de una ejecución con PROBARA_DEBUG=true.
Relacionado: Configuración · Red · Archivo de resultados · Fuente: troubleshooting.md, debugging.md