Referencia de Allure Fetch
Esquema de adjunto
Cada intercambio HTTP se registra como un adjunto JSON con tipo de contenido application/vnd.allure.http+json y extensión de archivo .httpexchange. El objeto raíz tiene la siguiente estructura:
| Campo | Tipo | Descripción |
|---|---|---|
schemaVersion | 1 | Versión del esquema. Siempre es 1. |
start | number | Marca de tiempo Unix en milisegundos cuando la solicitud comenzó. |
stop | number | Marca de tiempo Unix en milisegundos cuando se recibió la respuesta o el error. |
request | object | Datos capturados de la solicitud. Ver Solicitud. |
response | object | Datos capturados de la respuesta. Solo presente cuando se recibió una respuesta. Ver Respuesta. |
error | object | Información de error. Solo presente cuando la solicitud falló. Ver Error. |
Solicitud
| Campo | Tipo | Descripción |
|---|---|---|
method | string | Método HTTP en mayúsculas, por ejemplo "GET". |
url | string | URL de la solicitud, incluyendo los parámetros de consulta en su forma original sin redacción. |
headers | {name, value}[] | Encabezados de la solicitud después de la redacción. Se omite cuando no hay encabezados. |
query | {name, value}[] | Parámetros de consulta extraídos de la URL, después de la redacción. Se omite cuando no hay parámetros de consulta. |
cookies | Cookie[] | Cookies extraídas del encabezado Cookie de la solicitud, después de la redacción. Se omite cuando no hay cookies. Ver Cookie. |
body | object | Cuerpo de la solicitud. Solo presente cuando captureRequestBody es true y se envió un cuerpo. Ver Cuerpo. |
Respuesta
| Campo | Tipo | Descripción |
|---|---|---|
status | number | Código de estado HTTP. |
statusText | string | Texto de estado HTTP. |
headers | {name, value}[] | Encabezados de la respuesta después de la redacción. Se omite cuando no hay encabezados. |
cookies | Cookie[] | Cookies extraídas de los encabezados Set-Cookie de la respuesta, después de la redacción. Se omite cuando no hay encabezados Set-Cookie. Ver Cookie. |
body | object | Cuerpo de la respuesta. Solo presente cuando captureResponseBody es true y se recibió un cuerpo. Ver Cuerpo. |
Los cuerpos de solicitud y respuesta se capturan de objetos Request y Response clonados antes de ser consumidos, por lo que el Response devuelto a tu código de prueba permanece completamente legible.
Cuerpo
| Campo | Tipo | Descripción |
|---|---|---|
contentType | string | Valor del encabezado Content-Type. Ausente cuando no hay encabezado Content-Type. |
encoding | "utf8" | "base64" | Codificación utilizada para value. Presente para todos los cuerpos capturados excepto multipart. Ver Codificación de cuerpo. |
value | string | El contenido capturado del cuerpo, codificado según encoding. Presente para todos los cuerpos capturados excepto multipart. |
size | number | Tamaño del cuerpo en bytes. Ver Tamaño de cuerpo. |
truncated | boolean | true cuando el cuerpo excedió maxBodySize y fue recortado. |
form | {name, value}[] | Campos estructurados extraídos de un cuerpo application/x-www-form-urlencoded, después de la redacción. Ver Cuerpos de formulario URL-encoded. |
stream | object | Presente junto a value cuando el cuerpo fue recortado durante el streaming. Ver Cuerpos de stream. |
parts | object[] | Partes estructuradas para cuerpos multipart/form-data. Ver Cuerpos multipart. Presente en lugar de value, encoding y stream. |
Codificación de cuerpo
La propiedad encoding se determina por el encabezado Content-Type:
- Tipos de contenido de texto —
text/*,application/json,application/javascript,application/x-www-form-urlencoded,application/xml, o cualquier tipo que termine en+jsono+xml→"utf8". - Sin encabezado
Content-Type→"utf8"(tratado como texto). - Todos los demás tipos de contenido →
"base64".
Cuerpos de formulario URL-encoded
Cuando el tipo de contenido es application/x-www-form-urlencoded, el cuerpo contiene dos representaciones de los mismos datos:
value: la cadena URL-encoded re-serializada, con los campos sensibles reemplazados por el marcador de redacción.form: un array estructurado{name, value}[]con la misma redacción aplicada.
Cuerpos de stream
Cuando un cuerpo excede maxBodySize, la lectura se detiene y el campo stream aparece junto a value para indicar una captura parcial:
| Campo | Tipo | Descripción |
|---|---|---|
complete | boolean | Siempre es false cuando stream está presente. |
type | string | Tipo de stream derivado del tipo de contenido: text/event-stream → "server-sent-events", application/grpc → "grpc", todos los demás → "chunked". |
Cuando stream está presente, value contiene los bytes capturados hasta maxBodySize y truncated es true.
Cuerpos multipart
Cuando el tipo de contenido es multipart/form-data, el cuerpo se analiza mediante el método Web API formData() y se almacena como un array parts en lugar de value. Cada parte es una de las siguientes:
- Campo de texto:
{ name, encoding: "utf8", value, size, truncated: false }. Los valores de campos sensibles se redactan. - Parte de archivo:
{ name, fileName?, contentType?, size, truncated: false }. El contenido del archivo no se captura; solo se registra la metadata.
Tamaño de cuerpo
El campo size utiliza el encabezado Content-Length cuando está presente. Si Content-Length está ausente y el cuerpo se capturó completamente dentro de maxBodySize, size es el conteo real de bytes. Si Content-Length está ausente y el cuerpo fue recortado, size se omite.
Cookie
Las cookies de solicitud se extraen del encabezado Cookie. Las cookies de respuesta se extraen de los encabezados Set-Cookie.
| Campo | Tipo | Descripción |
|---|---|---|
name | string | Nombre de la cookie. |
value | string | Valor de la cookie, después de la redacción. |
path | string | Atributo Path. Solo para cookies de respuesta. |
domain | string | Atributo Domain. Solo para cookies de respuesta. |
expires | string | Atributo Expires. Solo para cookies de respuesta. |
httpOnly | boolean | true cuando el atributo HttpOnly está presente. Solo para cookies de respuesta. |
secure | boolean | true cuando el atributo Secure está presente. Solo para cookies de respuesta. |
sameSite | string | Valor del atributo SameSite. Solo para cookies de respuesta. |
Error
Presente cuando la solicitud falló. En fetch, esto ocurre por errores de transporte (por ejemplo, fallo de red), abortos (mediante AbortController) y errores de stream del cuerpo de respuesta. Las respuestas HTTP de error (4xx y 5xx) no son errores — producen una response normal sin campo error.
| Campo | Tipo | Descripción |
|---|---|---|
name | string | Propiedad name del error. |
message | string | Mensaje del error. |
stack | string | Traza de pila. Solo presente cuando includeErrorStack es true. |
Tipos de redacción
RedactionMatcher
Un RedactionMatcher controla si un valor de campo específico debe ser redactado. Puede ser cualquiera de los siguientes:
- Un string: redacta cualquier campo cuyo nombre sea igual al string, sin distinguir mayúsculas/minúsculas.
- Un
RegExp: redacta cualquier campo cuyo nombre coincida con el patrón. - Una función
(name: string, value: string, context: RedactionContext) => boolean: redacta según cualquier lógica, con acceso al nombre del campo, valor y contexto circundante.
withAllure(fetch, {
redactHeaders: [
"x-api-key", // nombre exacto, sin distinguir mayúsculas/minúsculas
/^x-internal-/i, // expresión regular sobre el nombre del encabezado
(name, value) => value.startsWith("sk-"), // coincidencia sobre el valor mismo
],
});RedactionContext
El argumento context que se pasa a una función RedactionMatcher:
| Propiedad | Tipo | Descripción |
|---|---|---|
kind | "header" | "query" | "cookie" | "form" | Qué categoría se está evaluando. |
name | string | El nombre del campo. |
value | string | El valor del campo. |
url | string | undefined | La URL de la solicitud. |
request | Request | undefined | El objeto Web API Request. |
response | Response | undefined | El objeto Web API Response. Solo presente al evaluar campos de la fase de respuesta (encabezados de respuesta, cookies de respuesta). |