# Reporter de Jest

> Envía a Probara cada resultado de tus pruebas de Jest desde cualquier CI con @probara/jest-reporter — instalación, configuración y lo que ves en tus ejecuciones.

`@probara/jest-reporter` es un reporter de [Jest](https://jestjs.io) que envía a Probara cada
resultado de un comando `jest`: cada intento con su estado, su duración y su error, vinculado a su
caso de prueba, con los pasos, los adjuntos y los enlaces que añaden tus pruebas. Los casos que
faltan se crean, y la ejecución se cierra cuando todo ha llegado.

Es de código abierto, está publicado en
[npm](https://www.npmjs.com/package/@probara/jest-reporter) en la versión `0.1.0` y vive en el
[repositorio probara-sdk](https://github.com/cynch-me/probara-sdk/tree/main/packages/jest-reporter).
Hasta la 1.0, una versión menor puede traer cambios incompatibles: fija la versión
([actualizar el reporter](https://docs.probara.net/es/developers/ci-integrations/jest/migrating/#actualizar-el-reporter)).

## Qué obtienes

- **Un resultado por intento**, incluidos los reintentos de `jest.retryTimes`, con el veredicto del
  propio Jest: se respeta `test.failing`, y `test.skip` y `test.todo` se envían como omitidos.
- **Las mismas claves de automatización que `probara import junit`** sobre la salida de jest-junit,
  así que al dejar la importación JUnit conservas cada caso y su historial.
- **Vinculación** por un ID de caso en el título de una prueba o de un `describe`
  (`SHOP-12 adds an item`) o con `probara.id()`.
- **Helpers de prueba** que funcionan en cada worker de Jest, tanto en `node` como en `jsdom`:
  `probara.step()`, `probara.attach()`, `probara.link()`, `probara.issue()`,
  `probara.parameters()`, y el título, la suite, las etiquetas y los campos de un caso nuevo.
- **Salida de consola** de cada prueba como adjuntos, y **selección de pruebas**: ejecuta solo las
  pruebas de una ejecución creada en Probara.
- **Ejecuciones** con nombre, entorno, hito, plan de pruebas, configuraciones y etiquetas; una sola
  ejecución para todos los shards de un job con sharding; una ejecución por sesión de `--watch`.
- **Nunca rompe tu ejecución de pruebas.** Un problema al reportar se registra, nunca se lanza, y el
  código de salida de Jest sigue siendo el de las pruebas. Lo que no se pudo enviar puede guardarse
  en un archivo y enviarse más tarde.

## Antes de empezar

| Necesitas                                                    | Por qué                                                                                                                                  |
| ------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------- |
| Node.js 22.12 o posterior                                    | El rango `engines` del paquete.                                                                                                          |
| Jest 29.6 o posterior                                        | El rango de peer: 29.6 es el primer Jest que avisa a un reporter cuando empieza cada prueba. Probado en 29.7 y en la última 30.          |
| jest-circus, el test runner por defecto de Jest              | Los helpers `probara.*` y el archivo de setup leen su estado. Con `testRunner: 'jest-jasmine2'` las pruebas se reportan, los helpers no. |
| Un plan de pago (**Pro** o **Enterprise**, o una prueba Pro) | El envío de resultados desde CI no forma parte del plan Free. En Free, Probara responde `403 forbidden`.                                 |
| Un **propietario** o **administrador** de Probara            | Solo los propietarios y administradores crean y revocan tokens de aplicación.                                                            |
| El **ID del Proyecto** al que enviar los resultados          | Por ejemplo `SHOP`: una letra mayúscula y después mayúsculas o dígitos.                                                                  |

## 1. Crea un token de aplicación

El reporter se autentica con un
[token de aplicación](https://docs.probara.net/es/developers/authentication/#tokens-de-aplicación): un token que pertenece a
tu organización, no a una persona. No ocupa ningún puesto y sigue funcionando cuando la persona que
lo creó se va.

1. En Probara, abre **Workspace › Integraciones** y selecciona la tarjeta **Jest**.
2. Abre la pestaña **Tokens de acceso** y selecciona **Crear un token de aplicación**.
3. Escribe un **Nombre del token** con el nombre de lo que lo usa (el repositorio o el pipeline) y
   selecciona **Crear token**.
4. Selecciona **Copiar token** en **Copia tu nuevo token**. Solo se muestra una vez: guárdalo en ese
   momento como un secreto de CI llamado `PROBARA_API_TOKEN`.

La [guía de la integración con Jest](https://docs.probara.net/es/guides/integrations/jest/) cubre la tarjeta, cómo gestionar
y revocar los tokens, y qué muestra Probara en las ejecuciones que crea un token de aplicación.

## 2. Instala el reporter

```bash
npm install --save-dev @probara/jest-reporter
```

## 3. Añádelo a la configuración de Jest

Añade el reporter después de `default` (el que lees en la terminal), con tu ID del Proyecto:

```js
// jest.config.js
module.exports = {
  reporters: ['default', ['@probara/jest-reporter', { projectId: 'SHOP' }]],
};
```

Si tu configuración es un módulo ES (`jest.config.mjs`, o `jest.config.js` en un paquete con
`"type": "module"`), exporta la misma entrada:

```js
// jest.config.mjs
export default {
  reporters: ['default', ['@probara/jest-reporter', { projectId: 'SHOP' }]],
};
```

Puedes omitir `projectId` y definir `PROBARA_PROJECT` en el entorno. El token nunca va en la
configuración: la configuración se sube al repositorio, y el reporter lee el token de
`PROBARA_API_TOKEN`.

### El archivo de setup

Dos funciones necesitan actuar dentro de cada archivo de prueba, así que necesitan el archivo de
setup del reporter:
[`captureOutput`](https://docs.probara.net/es/developers/ci-integrations/jest/steps-and-attachments/#salida-de-consola) (la
salida de consola de cada prueba) y la
[selección de pruebas](https://docs.probara.net/es/developers/ci-integrations/jest/run-selection/). Añádelo una vez; si esas
funciones no están activadas, no hace nada:

```js
// jest.config.js
module.exports = {
  reporters: ['default', ['@probara/jest-reporter', { projectId: 'SHOP' }]],
  setupFilesAfterEnv: ['@probara/jest-reporter/setup'],
};
```

Todo lo demás, incluidos los helpers `probara.*`, funciona sin él.

## 4. Ejecuta tus pruebas con el token

Pasa el secreto al paso que ejecuta `jest`. En GitHub Actions:

```yaml
- name: Run Jest tests
  run: npx jest
  env:
    PROBARA_API_TOKEN: ${{ secrets.PROBARA_API_TOKEN }}
```

No hay un paso de subida aparte: el reporter envía los resultados al final del mismo comando.
[Proveedores de CI](https://docs.probara.net/es/developers/ci-integrations/jest/ci-providers/) tiene pipelines completos para
GitHub Actions, GitLab CI, Jenkins, CircleCI, Azure Pipelines, Bitbucket Pipelines y Buildkite.

## Qué ves

Sin un token y un proyecto, el reporter queda desactivado y en silencio, así que las ejecuciones
locales no envían nada. En CI escribe en stderr, en líneas `[probara]`, y termina con el enlace a la
ejecución:

```text
$ 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
```

En Probara, la ejecución aparece en la lista de ejecuciones del proyecto como una ejecución
automatizada, con el nombre del build de CI (por ejemplo `Jest #42`), su rama, su commit y la URL del
build. Muestra la aplicación **Jest** y el nombre del token (por ejemplo **Jest · unit-ci**) en lugar
de una persona.

## Cómo se traduce Jest a Probara

| Jest                                                       | En Probara                                                                                            |
| ---------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- |
| Una prueba                                                 | Un caso de prueba, encontrado por su clave de automatización o vinculado por un ID de caso            |
| Cada intento (también los reintentos de `jest.retryTimes`) | Un resultado en la ejecución, con su estado, su duración, su hora de inicio y su error                |
| `test.skip`, `test.todo`, un `describe` omitido            | Un resultado omitido (`Todo` en las notas de un todo)                                                 |
| Llamadas a `probara.step()`                                | Los pasos del resultado, anidados, con su estado, su duración y su error                              |
| `probara.attach()`, la consola con `captureOutput`         | Archivos del resultado, o del paso en el que se adjuntaron                                            |
| `probara.link()`, `probara.issue()`                        | Enlaces del resultado                                                                                 |
| Otras llamadas `probara.*` en la prueba                    | El título, la suite, las etiquetas, los campos y los pasos de un caso nuevo; parámetros del resultado |
| Un archivo de prueba cuyo hook `afterAll` lanza un error   | Un resultado fallido más, como lo escribe jest-junit                                                  |
| El comando `jest`                                          | Una ejecución automatizada, con el nombre del build de CI, cerrada al final                           |

Un archivo de prueba que Jest no puede ejecutar (un error de sintaxis, una importación que falla) no
tiene pruebas que reportar: el reporter lo nombra en una advertencia.

## Los mismos casos que la importación JUnit

El reporter da a cada prueba la clave de automatización que le da `probara import junit` sobre el
informe de [jest-junit](https://github.com/jest-community/jest-junit) escrito con
`JEST_JUNIT_ADD_FILE_ATTRIBUTE=true`: el archivo de prueba, después `>` entre espacios, y después los
bloques `describe` y el título unidos por espacios, sin los IDs de caso. Para estos dos archivos de
prueba:

```js
// tests/cart.test.js
describe('cart', () => {
  test('SHOP-12 adds an item', () => {
    expect([1, 2]).toHaveLength(2);
  });

  test('removes an item', () => {
    expect([1].filter((item) => item !== 1)).toEqual([]);
  });
});
```

```js
// tests/login.test.js
describe('login', () => {
  test('logs in with a valid password', () => {
    expect('secret').toHaveLength(6);
  });
});
```

el reporter envía:

```json
[
  {
    "automationKey": "tests/cart.test.js > cart adds an item",
    "caseDisplayId": "SHOP-12",
    "status": "passed"
  },
  { "automationKey": "tests/cart.test.js > cart removes an item", "status": "passed" },
  {
    "automationKey": "tests/login.test.js > login logs in with a valid password",
    "status": "passed"
  }
]
```

Si tus informes de jest-junit no tenían el atributo de archivo (su valor por defecto), define
`keyIncludesFile: false`: las claves omiten entonces el archivo, como esos informes. En ambos casos,
una prueba conserva su caso y su historial al cambiar
([migrar desde la importación JUnit](https://docs.probara.net/es/developers/ci-integrations/jest/migrating/#desde-la-importación-junit)).

## Reportar nunca rompe tu ejecución de pruebas

El reporter nunca lanza errores dentro de Jest ni cambia su código de salida: una prueba fallida hace
fallar el comando, un problema al reportar no. Cada problema (un ajuste incorrecto, Probara
inalcanzable, un token rechazado) se registra en stderr, nunca con el token, y las pruebas conservan
su resultado. Las llamadas `probara.*` tampoco lanzan errores dentro de una prueba: una llamada que
Probara no puede usar se omite con una advertencia. No hay ninguna opción para hacer fallar el
comando por un error al reportar; para conservar lo que no se pudo enviar, define un
[archivo de resultados](https://docs.probara.net/es/developers/ci-integrations/jest/results-and-retries/#archivo-de-resultados).

## Referencia

| Página                                                                              | Qué cubre                                                                                           |
| ----------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- |
| [Configuración](https://docs.probara.net/es/developers/ci-integrations/jest/configuration/)                 | Cada opción, su variable, su tipo y su valor por defecto; precedencia; red, proxies y modo watch    |
| [Vincular pruebas con casos](https://docs.probara.net/es/developers/ci-integrations/jest/linking/)          | IDs de caso en títulos y describes, `probara.id()`, claves de automatización, `test.each`           |
| [Metadatos y enlaces](https://docs.probara.net/es/developers/ci-integrations/jest/metadata/)                | Título, suite, comentario, etiquetas, campos, parámetros, ignorar un intento; enlaces e incidencias |
| [Pasos y adjuntos](https://docs.probara.net/es/developers/ci-integrations/jest/steps-and-attachments/)      | `probara.step()`, `probara.attach()`, salida de consola, límites                                    |
| [Resultados y reintentos](https://docs.probara.net/es/developers/ci-integrations/jest/results-and-retries/) | Opciones de la ejecución, estados, reintentos, archivo de resultados, asignar resultados fallidos   |
| [Selección de pruebas](https://docs.probara.net/es/developers/ci-integrations/jest/run-selection/)          | `runCasesOnly`: ejecutar solo las pruebas de una ejecución de Probara                               |
| [Sharding y proyectos](https://docs.probara.net/es/developers/ci-integrations/jest/sharding/)               | Una ejecución para todos los shards; `projects` de Jest; varios proyectos de Probara                |
| [Proveedores de CI](https://docs.probara.net/es/developers/ci-integrations/jest/ci-providers/)              | GitHub Actions, GitLab CI, Jenkins, CircleCI, Azure Pipelines, Bitbucket Pipelines, Buildkite       |
| [Solución de problemas](https://docs.probara.net/es/developers/ci-integrations/jest/troubleshooting/)       | Problemas y soluciones, cada línea que registra el reporter, depuración                             |
| [Migración](https://docs.probara.net/es/developers/ci-integrations/jest/migrating/)                         | Desde la importación JUnit, Qase, Test IT, ReportPortal, Allure y TestRail; actualizaciones         |

Relacionado: [Resumen de integraciones de CI](https://docs.probara.net/es/developers/ci-integrations/) ·
[Reporter de Playwright](https://docs.probara.net/es/developers/ci-integrations/playwright/) ·
[Reporter de Cypress](https://docs.probara.net/es/developers/ci-integrations/cypress/) ·
[Reporter de Vitest](https://docs.probara.net/es/developers/ci-integrations/vitest/) ·
[CLI](https://docs.probara.net/es/developers/cli/) · [Guía de la integración con Jest](https://docs.probara.net/es/guides/integrations/jest/) ·
[Código fuente en GitHub](https://github.com/cynch-me/probara-sdk/tree/main/packages/jest-reporter)
