Matchers Personalizados en Chai
⏱ Dedicación recomendada: 0 minutos
Esto considera el contenido visible y relevante, e ignora texto colapsado o marcado como opcional.
En Chai, un popular framework de aserciones para JavaScript, es posible crear matchers personalizados de manera similar a Kotest. Chai permite extender su funcionalidad agregando métodos de aserción personalizados a su conjunto de matchers, proporcionando flexibilidad al escribir pruebas.
Crear un Matcher Personalizado en Chai
En Chai, los matchers personalizados se añaden a través de la función chai.Assertion.addMethod()
, que permite definir nuevos métodos de aserción. Estos métodos pueden verificar condiciones específicas en los objetos de prueba, de manera similar a los matchers en Kotest.
Ejemplo de Matcher Personalizado
A continuación, se muestra cómo crear un matcher personalizado en Chai para verificar si un número es par:
- TypeScript
- JavaScript
- Código esencial
- Código completo
chai.Assertion.addMethod('even', function() {
const actual = this._obj;
this.assert(
actual % 2 === 0,
'expected #{this} to be an even number',
'expected #{this} to not be an even number'
);
});
import { expect } from 'chai';
chai.Assertion.addMethod('even', function() {
const actual = this._obj;
this.assert(
actual % 2 === 0,
'expected #{this} to be an even number',
'expected #{this} to not be an even number'
);
});
describe('Custom matcher: even', function() {
it('should verify if a number is even', function() {
expect(4).to.be.even; // Pasa
expect(5).to.not.be.even; // Pasa
});
});
- Código esencial
- Código completo
chai.Assertion.addMethod('even', function() {
const actual = this._obj;
this.assert(
actual % 2 === 0,
'expected #{this} to be an even number',
'expected #{this} to not be an even number'
);
});
const chai = require('chai');
const expect = chai.expect;
chai.Assertion.addMethod('even', function() {
const actual = this._obj;
this.assert(
actual % 2 === 0,
'expected #{this} to be an even number',
'expected #{this} to not be an even number'
);
});
describe('Custom matcher: even', function() {
it('should verify if a number is even', function() {
expect(4).to.be.even; // Pasa
expect(5).to.not.be.even; // Pasa
});
});
- [1]
chai.Assertion.addMethod('even', ...)
: Agrega el matcher personalizadoeven
a Chai. - [2]
this._obj
: Hace referencia al valor actual que está siendo evaluado. - [3-7]
this.assert
: Realiza la comprobación. Siactual % 2 === 0
, la prueba pasa. Si no, falla con el mensaje definido.
Comparación entre Kotest y Chai
Característica | Kotest | Chai |
---|---|---|
Definición de matchers | Utiliza la interfaz Matcher<T> y MatcherResult . | Usa chai.Assertion.addMethod() para agregar nuevos matchers. |
Estructura del resultado | Devuelve MatcherResult con passed() y mensajes. | Usa this.assert para evaluar la condición. |
Matchers negados | Implementado automáticamente con shouldNot . | Negación automática con .not . |
Flexibilidad | Gran personalización y reutilización. | Flexible, aunque con menos estructura que Kotest. |
¿Qué Aprendimos?
Hemos comparado cómo crear matchers personalizados en Kotest y Chai. Ambos frameworks permiten definir validaciones específicas que se ajustan a las necesidades de las pruebas, aunque Kotest sigue una estructura más formal con Matcher<T>
y MatcherResult
, mientras que Chai se basa en la extensión del objeto Assertion
para agregar métodos personalizados.
En ambas herramientas, los matchers personalizados permiten mejorar la legibilidad y reutilización de las pruebas, facilitando la creación de aserciones específicas.
Bibliografías Recomendadas
- 🌐 "Building a Helper—Chai." Accedido: 3 de octubre de 2024. [En línea]. Disponible en: https://www.chaijs.com/guide/helpers/