Cómo probar errores con Jest en TypeScript

Sigo trabajando con Jest y TypeScript. Ya sabemos cómo hacer aserciones sobre variables y objetos en nuestro código, así que el siguiente paso es aprender a manejar y probar errores.
La clase Calculator tiene un nuevo requerimiento: si el tipo de cálculo no es +, - o /, necesitamos lanzar un error.
La tarea consiste en editar la clase Calculator y agregar los siguientes pasos:
-
Definir un arreglo con la lista de acciones válidas.
-
Si la acción no está en el arreglo, lanzar un error.
Tu código se verá de la siguiente forma:
export class Calculator {
static validActions: Array<string> = ['+',"-","/"];
public static increase(value: number) {
return value + 1;
}
public static generateCalcSetting(valueA: number, action: string, valueB: number) {
if(!this.validActions.includes(action)){
throw new Error("Invalid action");
}
let result : number;
switch (action) {
case "+":
result = valueA + valueB;
break;
case "-":
result = valueA - valueB;
break;
case "/":
result = valueA / valueB;
default:
result = 0;
}
return {
valueA,
mathAction: action,
valueB,
result
}
}
}Perfecto, ahora crea el archivo Calculator.test.ts y usa el matcher de Jest toBeInstanceOf(), que nos ayuda a verificar el tipo de dato. Para esto, necesitamos realizar los siguientes pasos:
-
Usar una sentencia
try-catch. -
Llamar a
generateCalcSettingcon parámetros incorrectos. -
En el bloque
catch, tomar el resultado devuelto, usartoBeInstanceOfy compararlo con el tipoError. -
Comparar que
error.messagesea igual a'Invalid action'.
Tu código debería verse así:
it('should return a error if is invalid action',() => {
try {
Calculator.generateCalcSetting(1,'M',5);
} catch (error) {
expect(error).toBeInstanceOf(Error);
expect(error.message).toBe('Invalid action');
}
})Ejecutamos nuestras pruebas para ver el resultado:
npm run test
> calculator@1.0.0 test /home/dany/Desktop/calculator
> jest
PASS src/tests/Calculator.test.ts
Calculator
✓ should return an error if is invalid action (1 ms)
Test Suites: 1 passed, 1 total
Tests: 1 passed, 1 total
Snapshots: 0 total
Time: 2.253 s
Ran all test suites.¡Excelente! El matcher toBeInstanceOf nos permite verificar el tipo de error y también leer la propiedad message para validar que el mensaje de error sea el esperado.
¡Listo!
Modern frontend development — Angular, React, TypeScript, accessibility, and performance.
Artículos Relacionados
Cómo mockear dependencias con Jest
Cuando probamos nuestro código, muchas funciones tienen dependencias internas que no queremos invocar directamente. Aprende cómo mockear dependencias con Jest paso a paso.
Cómo usar decoradores de clases en TypeScript con un ejemplo real
Los decoradores son una excelente característica de TypeScript que vemos en Angular y otros frameworks. Ayudan a escribir código limpio y declarativo. En este artículo te muestro cómo y cuándo crear tus propios decoradores con un ejemplo práctico.
Compartir este artículo
Si esta guía te resultó útil, compártela con tu equipo o con otros desarrolladores.
Software real. Lecciones reales.
Comparto las lecciones que aprendí por las malas, para que puedas evitarlas o estar preparado cuando ocurran.
Únete a 13,800+ desarrolladores y lectores.
Cero spam. Cancela tu suscripción en cualquier momento.