La prueba es una habilidad importante que todo desarrollador deber铆a tener. Sin embargo, algunos son reacios a hacerlo.
Cada uno de nosotros se encontr贸 con un desarrollador que afirm贸 que las pruebas son in煤tiles, requieren demasiado esfuerzo y, de hecho, su c贸digo es tan excelente que no se necesitan pruebas. No lo creas La prueba es crucial.

Las pruebas hacen que su c贸digo sea m谩s estable y reducen la cantidad de errores. Le parece que esto no es as铆, porque conoce cada parte de su c贸digo. Despu茅s de todo, lo escribiste, 驴por qu茅 m谩s pruebas?
Supongamos que est谩 creando una aplicaci贸n meteorol贸gica. Escribiste el c贸digo durante varios d铆as o semanas, para que lo sepas de vez en cuando.
Ahora imagine que ha terminado de trabajar en la aplicaci贸n y volver谩 a ella en unos meses. No recordar谩 todos los detalles del c贸digo anterior. Lo cambias ... y demonios ... algo est谩 roto. 驴C贸mo arreglas esto? Mire cada archivo que cree y config煤relo para que funcione nuevamente. Puede funcionar Pero cambiar este archivo romper谩 algo m谩s.
Toma otro ejemplo. 隆Despu茅s de varios meses de arduo trabajo, finalmente obtuvo el puesto que siempre hab铆a deseado! Te unes al equipo y comienzas a crear algo. Trabaja con c贸digo de otros desarrolladores y viceversa. Y en un d铆a todo se rompe. Si el equipo no ha integrado las pruebas en su aplicaci贸n, no te envidio.
Cada equipo debe escribir pruebas cuando crea software o aplicaciones. 驴No quieres ser una persona que no sabe c贸mo hacer la prueba?
S铆, escribir ex谩menes lleva tiempo. S铆, es dif铆cil al principio. S铆, crear aplicaciones es m谩s interesante. Pero las pruebas son importantes y ahorran tiempo si se implementan correctamente.
Mi objetivo hoy es mejorar las habilidades de prueba. Analizaremos las pruebas unitarias y el desarrollo a trav茅s de pruebas con Jest (herramienta de prueba de JavaScript). Por supuesto, hay otras herramientas de prueba que puede usar, como Mocha y Chai.
隆Empecemos!Prueba unitaria
Cuando decide probar la aplicaci贸n, se enfrenta a varios tipos de pruebas: pruebas unitarias (unidad), pruebas de integraci贸n y pruebas funcionales. Deteng谩monos en pruebas unitarias.
Las pruebas funcionales y de integraci贸n son igual de importantes, pero son m谩s dif铆ciles de configurar e implementar que las pruebas unitarias. En pocas palabras, la prueba unitaria consiste en probar peque帽as partes de su c贸digo: funciones, m茅todos de clase, etc. Usted env铆a datos a la entrada y confirma que ha recibido el resultado esperado.
Ventajas de las pruebas unitarias:- Hace que el c贸digo sea m谩s estable;
- Facilita cambios en la implementaci贸n de una funci贸n sin cambiar su comportamiento;
- Documenta tu c贸digo. Pronto entender谩s por qu茅.
- Te hace hacer el dise帽o correcto. De hecho, el c贸digo mal dise帽ado es a menudo m谩s dif铆cil de probar.
Desarrollo de prueba (TDD)Para comprender y utilizar el desarrollo a trav茅s de las pruebas, recuerde estas 2 reglas:
- Escriba una prueba que falle antes de escribir el c贸digo.
- Luego escriba c贸digo que pueda pasar la prueba.
Cuando usamos TDD, estamos hablando de un bucle "rojo, verde, refactor".
Rojo: escribe una prueba fallida sin escribir el c贸digo.
Verde: escriba el c贸digo m谩s simple que puede pasar la prueba. Incluso si el c贸digo te parece m谩s est煤pido.
Refactorizador: refactorizaci贸n de c贸digo, si es necesario. No se preocupe si cambia el c贸digo y las pruebas de su unidad se rompen si algo sale mal.
Estructurar un archivo de prueba
Jest proporciona funciones para estructurar pruebas:
describe: se usa para agrupar sus pruebas y describir el comportamiento de su funci贸n / m贸dulo / clase. Se necesitan dos par谩metros. La primera es una l铆nea que describe su grupo. La segunda es una funci贸n de devoluci贸n de llamada en la que tiene casos de prueba o funciones de enlace.
it or test: la prueba de tu unidad. Los par谩metros son los mismos que los descritos. Debe ser descriptivo. El nombramiento de la prueba depende de usted, pero puede comenzar con "Deber铆a".
beforeAll (afterAll): la funci贸n de
enlace se ejecuta antes (y despu茅s) de todas las pruebas. Toma un par谩metro, que es una funci贸n que ejecutar谩 antes (y despu茅s) de todas las pruebas.
beforeEach (afterEach): funci贸n de
enlace que se ejecuta antes (y despu茅s) de cada prueba. Toma un par谩metro, que es la funci贸n que ejecutar谩 antes (y despu茅s) de cada prueba.
Antes de escribir cualquier prueba, debe saber lo siguiente:
Puede omitir la prueba usando
.skip en
describe y:
it.skip (...) o
describe.skip (...) . Usando
.skip , le dices a Jest que ignore la prueba o el grupo.
Puede elegir exactamente las pruebas que desea ejecutar usando
.only on
describe y
it :
only (...) o
describe.only (...) . Esto es 煤til si tiene muchas pruebas y quiere enfocarse en una sola cosa o quiere "depurar" sus pruebas.
Configuraci贸n de broma
Para mostrarle las funciones de prueba que examinamos anteriormente, necesitamos configurar Jest. Es muy simple
Solo necesita Node.js y npm o Yarn. Aseg煤rese de estar utilizando la 煤ltima versi贸n de Node.js, ya que usaremos ES6. Cree un nuevo directorio e inicial铆celo.
mkdir test-example && cd test-example npm init -y # OR yarn init -y
-y responde "s铆" a todas las preguntas de npm o hilo. Ten铆a que crear un archivo package.json muy simple.
Luego agregue
Jest a su entorno de desarrollo.
yarn add jest --dev
Luego agregue el siguiente script a su
package.json :
"scripts": { "test": "jest" }
prueba de hilo ejecutar谩 sus archivos de prueba en un directorio. Por defecto, Jest reconoce archivos dentro del directorio __tests__, o archivos que terminan en .spec.js, o .test.js.
Eso es todo. 驴Est谩s listo para escribir la primera prueba?
Matchers (muestras)
Cuando verifica algo, necesita informaci贸n y el resultado esperado. Es por eso que Jest proporciona muestras para probar nuestros valores:
expect(input).matcher(output)
Jest tiene muchas muestras, aqu铆 est谩 la m谩s importante:
toBe: compara la igualdad estricta (===).
expect(1 + 1).toBe(2) let testsAreEssential = true expect(testAreEssential).toBe(true)
toEqual: compara valores entre dos variables, matrices u objetos.
let arr = [1, 2] arr.push(3) expect(arr).toEqual([1, 2, 3]) let x= 1 x++ expect(x).toEqual(2)
toBeTruthy (toBeFalsy): indica si el valor es verdadero (o falso).
expect(null).toBeFalsy() expect(undefined).toBeFalsy() expect(false).toBeFalsy() expect("Hello world").toBeTruthy() expect({foo: 'bar'}).toBeTruthy()
toContain: comprueba si una matriz contiene un elemento.
expect(['Apple', 'Banana', 'Strawberry']).toContain('Apple')
toThrow: comprueba si una funci贸n est谩 causando un error.
function connect () { throw new ConnectionError() } expect(connect).toThrow(ConnectionError)
Primeras pruebas
Ahora vamos a escribir nuestra primera prueba y jugar con nuestras funciones. Primero cree un archivo example.spec.js en su directorio y pegue lo siguiente:
describe('Example', () => { beforeAll(() => { console.log('running before all tests') }) afterAll(() => { console.log('running after all tests') }) beforeEach(() => { console.log('running before each test') }) afterEach(() => { console.log('running after each test') }) it('Should do something', () => { console.log('first test') }) it('Should do something else', () => { console.log('second test') }) })
Tenga en cuenta que no necesitamos importar todas las funciones que utilizamos. Ya son proporcionados por Jest.
Ejecute la
prueba de hilo :

Como no tiene declaraciones en las pruebas, pasar谩n. 驴Has visto diferentes instrucciones de console.log? Necesita comprender mejor c贸mo funcionan sus funciones y casos de prueba.
Ahora elimine todas las funciones de
enlace y agregue
.skip a la primera prueba:
describe('Example', () => { it.skip('Should do something', () => { console.log('first test') }) it('Should do something else', () => { console.log('second test') }) })
Ejecute la
prueba de hilo nuevamente:

Est谩 bien si la primera prueba no funciona.
Agregue una tercera prueba y use
.only :
describe('Example', () => { it('Should do something', () => { console.log('first test') }) it('Should do something else', () => { console.log('second test') }) it.only('Should do that', () => { console.log('third test') }) })
Ejecute la prueba de hilo nuevamente :

En la segunda parte del art铆culo, haremos una implementaci贸n simple de la pila en JavaScript usando TDD.