Introducción práctica a
para
![](https://s3.amazonaws.com/media-p.slid.es/uploads/7769/images/4638179/kairos.png)
Día 3: Pruebas asíncronas
Vuestro anfitrión
![](https://s3.amazonaws.com/media-p.slid.es/uploads/7769/images/3981790/20170712_115159.jpg)
Alex Fernández
Ingeniero senior en LogTrust
Co-organizador de Node.js Madrid
Índice día 3
- Librerías de pruebas: testing
- Sesión práctica 1: Pruebas asíncronas
- Pruebas automáticas
- Sesión práctica 2: Probando simplecached
Librerías de pruebas
![](http://kclegacypress.com/wp-content/uploads/2013/10/library2.jpg)
Testing
Tipos de pruebas
Pruebas unitarias
Pruebas de integración / de sistemas
Pruebas de carga
Pruebas automáticas: ¡las mejores!
librerías de testing
and, of course, testing
Pruebas de código asíncrono
No basta con correr el código y ver el resultado
Requieren una librería especial
Se envía el éxito o fracaso a una callback
Mocha
Estilo BDD (behaviour driven development)
Ejemplo:
describe('User', function() {
describe('#save()', function() {
it('should save without error', function(done) {
var user = new User('Luna');
user.save(function(err) {
if (err) done(err);
else done();
});
});
});
});
Testing
No usa globales
No muy extendida
Más didáctica (¡espero!)
Documentación: testing
Sesión Práctica 1: prueba asíncrona
Comprobar que la función getFiveAsync()
no da error
Comprobar que devuelve el valor 5
código a probar
Función que envía 5 a la callback
inmediatamente pero asíncrono
function getFiveAsync(callback) {
setImmediate(function() {
callback(null, 5);
});
}
setImmediate(callback, args...)
Llama a la callback después de los eventos de I/O
y antes de setTimeout()
y setInterval()
Ayuda de testing
testing.run([test function], callback);
testing.success("Well done!", callback);
Comprueba que el valor pasado sea igual al esperado
testing.equals([value], [expected], message, callback);
testing.check(error, "There is an error", callback);
Fuente: testing
Good job!
![](https://media.giphy.com/media/10spcFioEOY7zG/giphy.gif)
Bonus Track
Cambiar la función para que devuelva otro valor
Devolver un error desde la función
Cambiar el valor esperado a cuatro
Pruebas
![](http://31.media.tumblr.com/86660755338fd01286a93575b690d135/tumblr_msbffwfroZ1qfeaoyo1_500.png)
automáticas
¡Automatiza!
Diseña una API de control
Arranca y para el sistema usando la API
Tests auto-contenidos: limpia al terminar
Tres Reglas Básicas
Un solo botón
Haz los fallos visibles
Sin intervención manual
Sesión de prácticas 2: Simplecached
Crear un cliente de simplecached
Implementar get(), set(), delete()
Hacer pruebas con testing
Especificación técnica (cliente)
var client = new Client(host, port);
Crea un nuevo cliente
client.connect(callback);
Conecta al servidor simplecached
client.get(key, (error, value) => ...);
Obtiene un valor, o
null
si no existe
client.set(key, value, callback);
Añade un valor para una clave
client.delete(key, callback);
Borra una clave existenteAyuda
net.connect(port, host, listener)
Escuchar un evento una única vez
emitter.once(name, listener)
Crear una clase
class Client {
constructor(params) {
...
}
get(key, callback) {
...
}
}
Especificación técnica (test)
Hacer pruebas del cliente:
- Buscar una clave, comprobar que no existe.
- Guardar un valor cualquiera en la clave.
- Obtener la clave de nuevo, comprobar que existe
- Comprobar que tiene el valor guardado.
- Modificar la clave.
- Comprobar que tenemos el nuevo valor.
- Borrar la clave.
- Buscar la clave de nuevo, comprobar que no existe.
Good Job!
![](http://2.bp.blogspot.com/-vmJiBQhq7PE/UHNrgv0Yv8I/AAAAAAAAEq8/JmNusVmgj8Y/s1600/Happy_Monkey.jpg)
Bonus Track
Añadir un comando quit:
client.quit(callback);
Pruebas:
- Probar a cerrar el cliente.
- Intentar buscar una clave después de quit, ver qué pasa.
Bonus track: integración
Crear una prueba completa end-to-end
(Prueba de integración)
Reescribir la prueba de integración usando Mocha
Reimplementar con promesas o async/await
Fin del día 3
![](http://m1.paperblog.com/i/211/2116490/game-over-L-y4f8bz.jpeg)
Introducción práctica a Node.js, día 3
By Alex Fernández
Introducción práctica a Node.js, día 3
Curso de Nodejs para Kairós, día 3: pruebas asíncronas. 2018-03-16.
- 2,131