Primeros pasos con Allure Chai
Registra las aserciones de Chai como pasos en tu Allure Report.
Configuración
1. Prepara tu proyecto
Asegúrate de que Node.js esté instalado.
Allure Chai se prueba con Node.js 20 y 22. Las versiones anteriores pueden funcionar, pero no podemos garantizarlo.
Asegúrate de tener Chai instalado. Allure Chai es compatible con Chai 4, 5 y 6. Chai 7 y versiones posteriores no son compatibles.
Asegúrate de que Allure Report esté instalado. Si no lo está, sigue las instrucciones de instalación. Ten en cuenta que Allure Report requiere Java.
Allure Chai es un plugin para Chai — no ejecuta pruebas por sí solo. Instálalo junto con una integración de Allure para el ejecutor de pruebas. Es compatible con allure-mocha, allure-jasmine, allure-jest, allure-vitest, allure-playwright y allure-bun.
Por ejemplo, para usarlo con Mocha:
bashnpm install --save-dev allure-chai allure-mocha chai mochabashyarn add --dev allure-chai allure-mocha chai mochabashpnpm install --dev allure-chai allure-mocha chai mochaRegistra
allureChaicon Chai antes de que se ejecuten tus pruebas. El mejor lugar es un archivo de setup que tu ejecutor de pruebas cargue antes de la suite de pruebas.jsimport { allureChai } from "allure-chai"; import * as chai from "chai"; chai.use(allureChai);La forma de cargar un archivo de setup depende de tu ejecutor de pruebas. Por ejemplo, con Mocha, agrégalo mediante el flag
--requireo en.mocharc.json:json{ "require": ["./test/setup.js"] }Con Vitest, agrégalo a
setupFilesenvitest.config.ts:tsexport default defineConfig({ test: { setupFiles: ["allure-vitest/setup", "./test/setup.ts"], }, });WARNING
Asegúrate de llamar a
chai.use(allureChai)después de que la integración del ejecutor de Allure esté inicializada. Los imports de setup comoallure-vitest/setupy similares deben ir primero.
2. Ejecuta las pruebas
Ejecuta tus pruebas de la misma manera que lo harías normalmente. Por ejemplo, con Mocha:
npm testyarn testpnpm testCada aserción de Chai se registrará como un paso dentro de la prueba que la realizó. Los resultados de prueba se guardarán en allure-results o en el directorio que tu integración del ejecutor esté configurada para usar.
3. Genera un reporte
Por último, convierte los resultados de prueba en un reporte HTML. Esto se puede hacer con uno de dos comandos:
allure generateprocesa los resultados de prueba y guarda un reporte HTML en el directorioallure-report. Para ver el reporte, usa el comandoallure open.allure servecrea el mismo reporte queallure generatey luego abre automáticamente la página principal del reporte en un navegador web.
Cómo aparecen las aserciones en los reportes
Una vez registrado, Allure Chai registra automáticamente cada aserción de Chai como un paso. Cada paso recibe el nombre de la expresión de aserción, de modo que el reporte se lee como el código de la prueba. Una aserción aprobada produce un paso aprobado; una aserción fallida produce un paso fallido con el mensaje de error original, y los valores real y esperado del error de aserción se capturan en los detalles del paso.
Los tres estilos de aserciones de Chai son compatibles.
Estilo expect
expect(response.status).to.equal(200);Produce un paso con el nombre:
expect(201).to.equal(200)Estilo should
import "chai/register-should";
response.status.should.equal(200);Produce un paso con el nombre:
expect(201).to.equal(200)Estilo assert
assert.equal(response.status, 200);Produce un paso con el nombre:
assert.equal(201, 200)Aserciones encadenadas
Cuando encadenas aserciones, cada aserción en la cadena produce su propio paso hermano. El segundo paso se ejecuta sobre el valor devuelto por la primera aserción, no sobre el objeto original:
expect({ id: 1, name: "Ada" }).to.have.property("name").that.equals("Ada");Produce dos pasos:
expect({"id":1,"name":"Ada"}).to.have.property("name")
expect("Ada").to.equal("Ada")Modificadores en los nombres de pasos
Los modificadores como not, include, deep, nested, own, ordered, any y all aparecen en el nombre del paso. Por ejemplo:
const user = { name: "Alice" };
expect(user).to.not.have.property("password");
const body = { id: 2 };
expect(body).to.deep.equal({ id: 1, name: "Alice" });
expect([1, 2, 3]).to.include.any.members([1, 2]);Estos producen pasos con los nombres:
expect({"name":"Alice"}).to.not.have.property("password")
expect({"id":2}).to.deep.equal({"id":1,"name":"Alice"})
expect([1,2,3]).to.include.any.members([1,2])Las propiedades de la cadena de lenguaje como and, but, with, that, etc. no tienen efecto en el nombre del paso. to siempre aparece en los nombres de pasos de expect/should. be y have se agregan automáticamente como prefijos cuando el nombre de la aserción los requiere — no necesitas escribirlos en tu código para que aparezcan en el nombre del paso.
length vs lengthOf
expect(arr).to.have.length(3) produce expect([...]).to.length(3) — el have se descarta porque length es un método encadenable, no una aserción con prefijo have. Usa lengthOf si quieres que have aparezca: expect(arr).to.have.lengthOf(3) → expect([...]).to.have.lengthOf(3).
Aserciones personalizadas
Allure Chai instrumenta automáticamente las aserciones añadidas mediante chai.Assertion.addMethod(), chai.Assertion.addProperty() y chai.Assertion.addChainableMethod(). No se necesita configuración adicional — las aserciones personalizadas se registran como pasos de la misma manera que las integradas.
Las APIs overwriteMethod, overwriteProperty y overwriteChainableMethod no son interceptadas. Si un plugin de Chai las utiliza para redefinir una aserción existente después de chai.use(allureChai), la implementación sobreescrita no se envolverá automáticamente y esa aserción ya no se registrará como un paso.
chai.Assertion.addMethod("positiveNumber", function () {
this.assert(
this._obj > 0,
"expected #{this} to be a positive number",
"expected #{this} to not be a positive number",
);
});
expect(42).to.be.positiveNumber();
// Paso: expect(42).to.positiveNumber()Si una aserción personalizada llama a aserciones internas dentro de un callback, esas aserciones internas se registran como pasos hijo anidados del paso de la aserción exterior:
chai.Assertion.addMethod("satisfyEach", function (callback) {
const items = chai.util.flag(this, "object");
items.forEach(callback);
});
expect([{ enabled: true }]).to.satisfyEach((item) => {
expect(item.enabled).to.equal(true);
});
// Paso: expect([{"enabled":true}]).to.satisfyEach([Function])
// Paso: expect(true).to.equal(true)Compatibilidad
Allure Chai requiere que haya una integración de Allure para el ejecutor de pruebas activa cuando se ejecutan las pruebas. Es compatible con las siguientes integraciones:
| Integración | Compatible |
|---|---|
| allure-mocha | Sí |
| allure-jasmine | Sí |
| allure-jest | Sí |
| allure-vitest | Sí — ver nota abajo |
| allure-playwright | Sí |
| allure-bun | Sí |
| allure-cypress | No |
Nota para usuarios de Vitest: El propio expect() de Vitest está basado en Chai, pero allure-vitest ya registra las aserciones de Vitest como pasos. Para evitar pasos duplicados, Allure Chai omite automáticamente las aserciones integradas de Vitest. El plugin sigue siendo útil cuando añades aserciones de Chai adicionales por encima de las integradas de Vitest — por ejemplo, de un plugin de Chai como chai-http.
Cypress no es compatible: Cypress incluye su propia instancia de Chai. Allure Chai detecta cuando globalThis.Cypress está presente y la instancia de Chai registrada coincide con la propia de Cypress, y se excluye para esa instancia — registrar allureChai contra el Chai de Cypress no tendrá ningún efecto. Si importas una copia separada de Chai en el mismo proyecto (por ejemplo, para un plugin como chai-http), esa instancia no se ve afectada por la verificación de Cypress y seguirá siendo registrada. Usa allure-cypress para las aserciones nativas de Cypress.