# Resultados y reintentos

> Cómo se convierte cada intento, fila de esquema y estado de paso en un resultado de Probara, cómo se envían los reintentos, y cómo mapear o filtrar estados o conservar lo que no se pudo enviar.

## Resultados

Cada intento de un escenario es un resultado, en el orden en que se ejecutaron los intentos:

- Un escenario que no se reintenta envía un resultado.
- Un escenario que falla una vez y luego pasa, con `--retry`, llega como dos resultados de una misma clave: el
  intento fallido y después el intento aprobado.
- Cada fila de un esquema de escenario es un resultado propio, registrado en el caso de ejecución con sus valores. Un caso que el reporte crea toma los encabezados de Examples como su parámetro `Examples`, cuando al menos dos filas reportan los mismos nombres.

```bash
npx cucumber-js --retry 2 --format @probara/cucumber-reporter
```

Cada intento queda en el historial del caso. La ejecución del caso conserva el último resultado.

## Estados

Cada resultado tiene uno de cuatro estados: `passed`, `failed`, `skipped` o `blocked`. El reporter envía `passed`,
`failed` y `skipped`. `blocked` llega desde el [mapeo de estados](#mapeo-y-filtro-de-estados).

### Estados de los pasos

| Estado de Cucumber                           | Estado en Probara | Por qué                                                                 |
| -------------------------------------------- | ----------------- | ----------------------------------------------------------------------- |
| `passed`                                     | `passed`          | El paso se ejecutó y pasó.                                              |
| `failed`                                     | `failed`          | El paso se ejecutó y falló. Su mensaje es el error del paso.            |
| `ambiguous`                                  | `failed`          | Más de una definición coincide con el paso. Su mensaje lo indica.       |
| `skipped`, `pending`, `undefined`, `unknown` | `skipped`         | El paso no se ejecutó: se omitió, no tiene definición o está pendiente. |

El informe de Cucumber escribe estos estados en minúsculas (su informe JSON) o en mayúsculas (sus Messages). El
reporter acepta ambos.

### Estados de los escenarios

Un escenario, o una fila de un esquema, es:

1. `failed` cuando falla alguno de sus pasos, o alguno de sus hooks `Before` o `After`;
2. si no, `skipped` cuando alguno de sus pasos no se ejecutó;
3. si no, `passed`.

## Mapeo y filtro de estados

`statusMapping` envía un estado como otro, y `statusFilter` deja fuera del reporte los resultados con esos
estados, después del mapeo. Por ejemplo, `PROBARA_STATUS_MAPPING=failed=blocked` y `PROBARA_STATUS_FILTER=skipped`
envían cada escenario fallido como bloqueado, y no envían ninguno omitido.

## Duraciones

La duración de un paso es la suya propia. La duración de un escenario es la suma de sus pasos y hooks, en
milisegundos. El inicio de cada intento se envía como su `executedAt`.

## Archivo de resultados

Cuando Probara no puede recibir un resultado, el reporter puede guardarlo en un archivo para enviarlo después. Define
`resultsFile` (`PROBARA_RESULTS_FILE=reports/probara-results.json`): al terminar la ejecución, se escribe ahí cada
resultado que no se envió. Con el reporte desactivado, se escriben ahí todos los resultados.

El archivo nunca se sobrescribe. Si ya existe, el reporter escribe en el primer nombre libre junto a él
(`probara-results-2.json`, y así sucesivamente), y la línea de resumen indica dónde quedó.

Para enviar el archivo más tarde, ejecuta la CLI con el mismo token y el mismo proyecto:

```bash
npx @probara/cli import results 'reports/probara-results*.json'
```

Sus resultados conservan sus claves y sus enlaces a los casos.

## Asignar resultados fallidos

`assignFailedTo` (`PROBARA_ASSIGN_FAILED_TO=ana@example.com,bo@example.com`) asigna cada resultado fallido que no
tiene responsable a uno de los miembros que nombra, por turnos.
