Matchers personalizados en Jasmine
⏱ Dedicación recomendada: 0 minutos
Esto considera el contenido visible y relevante, e ignora texto colapsado o marcado como opcional.
r8vnhill/
En Jasmine, un popular framework de pruebas para JavaScript, también es posible definir matchers personalizados para realizar aserciones específicas. Al igual que en Kotest, Jasmine permite crear validaciones que se ajusten a las necesidades particulares de nuestras pruebas. En esta sección, compararemos los matchers personalizados de Jasmine con los de Kotest.
Crear un Matcher Personalizado en Jasmine
En Jasmine, los matchers personalizados se definen utilizando el método jasmine.addMatchers()
. Cada matcher personalizado es una función que retorna un objeto con dos funciones: compare
y, opcionalmente, negativeCompare
, que manejan la verificación de la condición en afirmaciones normales y negadas respectivamente.
Ejemplo de Matcher Personalizado
A continuación, se muestra cómo crear un matcher personalizado en Jasmine para verificar si un número es par:
- Código esencial
- Código completo
jasmine.addMatchers({
toBeEven: () => ({
compare: actual => {
return {
pass: actual % 2 === 0,
message: actual + " is not an even number"
};
}
})
});
beforeEach(() => {
jasmine.addMatchers({
toBeEven: () => ({
compare: actual => {
return {
pass: actual % 2 === 0,
message: actual + " is not an even number"
};
}
})
});
});
describe("The parity of", () => {
const evenNumbers = [2, 4, 6, 8, 10];
const oddNumbers = [1, 3, 5, 7, 9];
evenNumbers.forEach(number => {
it(`${number} should be even`, () => {
// noinspection JSUnresolvedReference
expect(number).toBeEven();
});
});
oddNumbers.forEach(number => {
it(`${number} should not be even`, () => {
// noinspection JSUnresolvedReference
expect(number).not.toBeEven();
});
});
});
toBeEven
: Define un matcher que verifica si un número es par.compare
: Esta función compara el valor actual (actual
) con la condición esperada. Si la condición se cumple (el número es par), establecepass
entrue
; de lo contrario, enfalse
.message
: Proporciona un mensaje de error cuando la prueba falla, que se mostrará en el reporte de pruebas.
Comparación con Kotest
Característica | Kotest | Jasmine |
---|---|---|
Definición de matchers | Utiliza la interfaz Matcher<T> y MatcherResult . | Usa jasmine.addMatchers() para agregar nuevos matchers. |
Estructura del resultado | Devuelve MatcherResult con passed() y mensajes. | Retorna un objeto con pass y message . |
Matchers negados | Implementado automáticamente con shouldNot . | Se puede agregar con negativeCompare . |
Flexibilidad | Permite gran personalización y reutilización. | Sencillo y fácil de usar, pero menos flexible que Kotest. |
Ventajas y Desventajas de los Matchers Personalizados en Jasmine
Beneficios
- Simplicidad en la implementación: Jasmine ofrece una forma rápida y sencilla de agregar matchers personalizados utilizando
addMatchers()
. Esto permite extender las capacidades de Jasmine sin complicaciones. - Flexibilidad básica: Aunque es más sencillo que otros frameworks, permite definir comportamientos específicos como matchers negados a través de
negativeCompare
, ofreciendo un nivel razonable de personalización. - Compatibilidad con JavaScript puro: No es necesario utilizar TypeScript ni configuraciones complejas para definir matchers, lo que lo hace accesible para proyectos pequeños o medianos que utilicen solo JavaScript.
- Uso en proyectos existentes: Es fácil integrar matchers personalizados en proyectos que ya usan Jasmine sin necesidad de grandes refactorizaciones.
Limitaciones
- Menor flexibilidad avanzada: Aunque es fácil de implementar, Jasmine no ofrece la misma capacidad de personalización y control detallado que otros frameworks como Kotest, lo que puede ser una desventaja para proyectos más complejos.
- Negación manual: Para agregar comportamiento negado (
not
), debes definir explícitamentenegativeCompare
, lo que puede ser menos eficiente comparado con frameworks que lo manejan automáticamente. - Interfaz menos fluida: A diferencia de Kotest, que permite usar funciones de extensión (
shouldBeEven()
), Jasmine requiere añadir los matchers manualmente medianteaddMatchers
, lo que puede hacer el código más verboso. - Mensajes de error limitados: Los mensajes de error personalizados en Jasmine son simples y no ofrecen la misma capacidad de personalización avanzada que otros frameworks de pruebas más robustos.
¿Qué aprendimos?
En esta sección, hemos aprendido cómo crear matchers personalizados en Jasmine, lo que nos permite extender el framework para cubrir necesidades específicas en nuestras pruebas.
Puntos clave
- Simplicidad y flexibilidad básica: Jasmine permite la creación de matchers personalizados con facilidad, proporcionando una estructura sencilla basada en funciones como
compare
y, opcionalmente,negativeCompare
para manejar aserciones negadas. - Limitaciones en proyectos complejos: Aunque Jasmine ofrece una solución rápida y eficiente para proyectos pequeños o medianos, carece de la flexibilidad avanzada y la personalización más granular que frameworks como Kotest ofrecen. Esto incluye la necesidad de implementar manualmente la negación de los matchers y limitaciones en los mensajes de error.
- Comparación con Kotest: Jasmine es más ligero y menos verboso para configuraciones rápidas, pero Kotest destaca por su enfoque más fluido y personalizado en las pruebas, con una mayor capacidad de reutilización y manejo automático de casos negados.
En conclusión, los matchers personalizados en Jasmine son una herramienta valiosa para quienes buscan una forma rápida de mejorar la precisión de sus aserciones, pero para proyectos que requieran mayor flexibilidad y personalización avanzada, otras herramientas como Kotest pueden ser más adecuadas.
Bibliografías Recomendadas
- 🌐 "Custom matcher." Accedido: 3 de octubre de 2024. [En línea]. Disponible en: https://jasmine.github.io/tutorials/custom_matcher