Aprende a resolver con confianza el dominio de unit testing del examen JSNAT. Aquí tienes un enfoque directo para cubrir el último ejercicio: elegir un framework, escribir tres aserciones claras con deep equal y ejecutar los tests con npm test. Dominarás validaciones de string, manejo de errors y pruebas sobre objects sin complicaciones.
¿Qué evalúa el dominio de unit testing en JSNAT?
Este dominio pesa 6% y se resuelve con un único ejercicio (task 13.1). Se trabaja sobre un aplicativo de Node y el reto central es testear un módulo con tres resultados posibles.
- Usa un framework de pruebas en Node: Tape, Mocha o Abba. Evita Jest por problemas en la certificación.
- Conoce bien el framework elegido y una librería de aserciones si la necesitas.
- El archivo a probar es toTest.js y el test va en answer.js.
¿Qué hace el módulo toTest.js?
El module exporta una única función que recibe un argumento tipo string y contempla tres salidas:
- Si el string corresponde a un usuario válido: retorna un user object.
- Si no es un usuario: retorna un object con un error message (por ejemplo: not found).
- Si el argumento no es string: hace throw de un TypeError.
¿Cómo testear los tres casos con Mocha y deep equal?
La solución propone tres aserciones con nombres claros usando la convención de Mocha: it returns an user object, it returns an object with an error y throws an error. Al comparar objects, utiliza deep equal.
- Caso 1: usuario válido devuelve un objeto con las claves esperadas (por ejemplo: password y role).
- Caso 2: usuario inexistente devuelve { error: 'not found' }.
- Caso 3: un argumento que no es string lanza TypeError.
¿Cómo se vería el test en answer.js?
// answer.js
const toTest = require('./toTest');
it('returns an user object', () => {
const result = toTest('admin');
// estructura esperada con password y role.
expect(result).to.deep.equal({
password: '...', // valores según toTest.js
role: '...' // valores según toTest.js
});
});
it('returns an object with an error', () => {
const result = toTest('no user');
expect(result).to.deep.equal({ error: 'not found' });
});
it('throws an error', () => {
const call = () => toTest(123);
expect(call).to.throw(TypeError);
});
¿Cómo configurar package.json para npm test?
Define el script de prueba para ejecutar Mocha sobre answer.js. Así ejecutas todo con un simple npm test.
{
"scripts": {
"test": "mocha answer"
}
}
¿Qué habilidades y keywords debes dominar?
Más allá de escribir código, aquí se mide tu capacidad para traducir requisitos a casos de prueba y configurar el entorno de ejecución.
- Selección de framework: Tape, Mocha o Abba. Evitar Jest.
- Aserciones sobre objects con deep equal.
- Manejo de errores: throw y TypeError.
- Validación de tipos: asegurar que el argumento sea string.
- Configuración de package.json y uso de npm test.
- Organización de pruebas: answer.js probando toTest.js con nombres de tests claros.
¿Tú con qué framework probarías este módulo y cómo nombrarías tus casos de prueba? Cuéntalo en los comentarios.