Header Ads Widget

Ticker

6/recent/ticker-posts

Probando JavaScript con Jest

A medida que crea una aplicación, es muy fácil probar cosas manualmente. ¡Ha estado haciendo esto desde que comenzó a escribir sus primeras líneas de código! ¿Cómo? Piénsalo. Escribe un código, lo guarda y luego ejecuta el código para ver cuál es el resultado. ¿Te dio el resultado que querías? ¡Excelente! Entonces funcionó. Entonces, si es tan fácil probar el código que escribe, ¿por qué escribir pruebas automatizadas? La razón es que a medida que su aplicación crece, lleva más y más tiempo probar manualmente cada parte de la aplicación.

la prueba de aplicación manual lleva tiempo


¿Cuáles son los beneficios de las pruebas?

Las pruebas automatizadas le permiten probar su código con frecuencia en un pequeño período de tiempo. Esto significa que puede encontrar problemas y errores antes de enviar su código a producción. Si alguna vez ha implementado una aplicación por primera vez, conoce la preocupación que conlleva. ¿Funcionará? ¿Hay errores? Las pruebas automatizadas le ayudan a tener más confianza en que las cosas funcionarán cuando sea necesario. Para ser justos, las pruebas no le evitarán lidiar con problemas y errores una vez que el software entre en producción. Es imposible escribir un software perfecto, no importa cuántas pruebas escriba. Sin embargo, en lugar de implementar una aplicación con 25 errores, tal vez se implemente con solo 5 gracias a todas sus pruebas. Otro beneficio es permitirle refactorizar su código con más confianza. En otras palabras, puede limpiar sus funciones,


¿Cuáles son los tipos de pruebas en el desarrollo de software?

tipos de pruebas de software
En general, existen tres tipos de pruebas automatizadas en el desarrollo de software.

  • Pruebas unitarias: prueba una pequeña unidad de una aplicación sin recursos externos como una base de datos.
  • Pruebas de integración: pruebe la aplicación con todos los recursos externos en su lugar.
  • Pruebas funcionales / de extremo a extremo: pruebe la aplicación a través de su interfaz de usuario.

La pirámide de pruebas

¿Qué tipo de pruebas se deben corregir al crear una aplicación? Si tenemos varios tipos, ¿cuál es mejor? Bueno, lo más probable es que tenga una combinación de los tres tipos de pruebas. La mayor cantidad de pruebas serían pruebas unitarias, ya que son fáciles de escribir y ejecutar rápidamente. A continuación, tendría una colección de pruebas de integración. Es probable que haya menos pruebas de integración en la aplicación que pruebas unitarias. Por último, tendría algunas pruebas de extremo a extremo, ya que son las más completas pero también las más lentas. Este enfoque parece una pirámide. Tenga en cuenta que E2E significa "de extremo a extremo" o funcional.
pirámide de prueba de software
Esto significa que escribiría la mayoría de sus pruebas como pruebas unitarias. Para cualquier brecha que aparezca en la cobertura de la prueba, use las pruebas de integración. Por último, use las pruebas de extremo a extremo al menos.


Escribir su primera prueba unitaria

Entonces, ¿cuándo podemos escribir una prueba? ¡Vamos a empezar con eso ahora mismo! Primero, vamos a crear un directorio de prueba de javascript, luego podemos usar NPM para instalar JestPrimero usemos npm init para crear un nuevo archivo package.json.

prueba de javascript $ npm init
Esta utilidad lo guiará a través de la creación de un archivo package.json.
Solo cubre los elementos más comunes e intenta adivinar valores predeterminados razonables.
Consulte la npm help jsondocumentación definitiva sobre estos campos.
y exactamente lo que hacen.
Úselo luego para instalar un paquete ynpm install 
guárdelo como una dependencia en el archivo package.json. Presione ^ C en cualquier momento para salir.
nombre del paquete: (javascript-testing)
versión: (1.0.0)
descripción: Tutorial de prueba de JavaScript
punto de entrada: (index.js)
comando de prueba: broma
repositorio git:
palabras clave:
autor:
licencia: (ISC)
A punto de escribir en C: nodejavascript-testingpackage.json:

{
  "nombre": "prueba de javascript",
  "versión": "1.0.0",
  "description": "Tutorial de prueba de JavaScript",
  "main": "index.js",
  "guiones": {
    "prueba": "broma"
  },
  "autor": "",
  "licencia": "ISC"
}


¿Esta bien? (si)

Ahora podemos instalar Jest.
npm instalar broma

Ahora deberíamos echar un vistazo a la línea resaltada aquí en el archivo package.json. Esto quiere decir que cuando ejecutamos npm testen la línea de comandos, el jestscript se ejecutará para ejecutar todas las pruebas.

Probémoslo y veamos qué pasa:

prueba javascript-testing $ npm
> javascript-testing@1.0.0 prueba C: nodejavascript-testing
> broma
No se encontraron pruebas en C: nodejavascript-testing
  2 archivos comprobados. testMatch: ** / __ tests __ / ** / *. js? (x), ** /? (*.) + (spec | test) .js? (x) - 0 coincide con testPathIgnorePatterns: \ node_modules \ - 2 coincide
Patrón: - 0 coincidencias
npm ERR! Prueba fallida. Consulte más arriba para obtener más detalles.
prueba de javascript $

¡Excelente! Jest está funcionando pero aún no tenemos ninguna prueba. ¡Creemos uno! En nuestro proyecto, podemos agregar una testscarpeta. En esta carpeta colocaremos un utility.test.jsarchivo.
ejemplo de prueba de broma
El hecho de que aparezca la palabra prueba en el nombre del archivo le permitirá a Jest saber que se trata de una prueba. Aquí está nuestra primera prueba. Todavía no prueba nada, pero esto nos permitirá ejecutar npm testla línea de comandos y ver qué sucede.

¡Ahora ejecutamos nuestra prueba y lo comprobamos!
prueba de paso de broma

Arriba vemos cómo se ve una prueba de aprobación en Jest. Ahora, veamos cómo se ve una prueba fallida. Podemos modificar nuestra prueba así.

Ahora, cuando lo ejecutamos, obtenemos una gran cantidad de información útil.
prueba de broma fallida


Cómo probar números

Tenemos una función en nuestro archivo utility.js que crea un número absoluto. En otras palabras, nunca devolverá un número negativo.

Escribamos una nueva prueba para probar esto. Aquí está la primera iteración.

Podemos ejecutar la prueba y pasa.

prueba javascript-testing $ npm

> javascript-testing@1.0.0 prueba C: nodejavascript-testing
> broma

 PASS pruebas / utility.test.js
  √ absoluto: debe devolver un número positivo para cualquier entrada positiva (6 ms)

Grupos de pruebas: 1 aprobado, 1 en total
Pruebas: 1 aprobada, 1 total
Instantáneas: 0 en total
Tiempo: 6.351 s, 7 s estimados
Ejecutó todas las suites de prueba.

También se supone que esta función devuelve un número positivo incluso cuando se le da un número negativo. No hay problema, podemos agregar eso a la prueba.

Ahora, cuando ejecutamos las pruebas, vuelve a pasar. ¡Excelente! También observe cómo se nos muestra cuántas pruebas se ejecutaron.
pasando dos pruebas de broma

Ahora hagamos que una prueba no muestre cómo usar los valores esperados frente a los recibidos para solucionar problemas. Sabemos que esta función debería devolver 0 si se le da 0 como entrada. Podemos hacer una prueba para fallar por esta condición como tal.

Mire el resultado que obtenemos de una prueba fallida.
resolución de problemas de pruebas fallidas en broma

Eso fue solo para mostrar cómo se ve la prueba fallida. Podemos arreglar esa prueba, y ahora así es como se ve el éxito de las 3 pruebas para esta función.
tres buenas pruebas de broma


Cómo probar cadenas

Ahora podemos probar una función que se ocupa de cadenas. Considere esta función simple que saluda a alguien cuando luego proporciona su nombre.

Hagamos una prueba para eso. Esta prueba utilizará una nueva sintaxis.

La prueba se ve bien cuando la ejecutamos.

prueba javascript-testing $ npm

> javascript-testing@1.0.0 prueba C: nodejavascript-testing
> broma

 PASS pruebas / utility.test.js
  Hola
    √ debe devolver el mensaje de saludo (7ms)

Grupos de pruebas: 1 aprobado, 1 en total
Pruebas: 1 aprobada, 1 total
Instantáneas: 0 en total
Tiempo: 6.977 s
Ejecutó todas las suites de prueba.

Otra opción que puede usar al probar cadenas es el comparador toContain () en lugar de toBe (). La razón es que la prueba puede ser demasiado específica y puede fallar fácilmente. A continuación se muestra una versión un poco más flexible de la misma prueba.


Cómo probar matrices

Echemos un vistazo a algunas pruebas de matriz simples que podemos usar en Jest. Imagina que tenemos esta función que devuelve una matriz de tickers de acciones.

Aquí está la prueba que creamos para esto. Consulte los documentos para comprender cómo funciona la función arrayContaining () .


Cómo probar objetos

En esta función pasamos el id de un juego, y la función devuelve un objeto de juego que tiene ese id.

Aquí hay una prueba que garantizará que obtengamos el juego correcto.

Cuando ejecutamos la prueba, ¡todo se ve bien!
broma toequal para probar objetos


Cómo probar excepciones

Para las funciones que tienen la capacidad de generar un error, debemos adoptar un enfoque diferente para la prueba. Considere esta función que crea un nuevo usuario. Si no se proporciona el nombre de usuario, generará una excepción.

Así es como podemos probar una función como esta.

La prueba está pasando cuando la ejecutamos.

prueba javascript-testing $ npm

> javascript-testing@1.0.0 prueba C: nodejavascript-testing
> broma

 PASS pruebas / utility.test.js
  crear usuario
    √ debería arrojar un error si el nombre de usuario es falso (9ms)
    √ debe devolver un objeto de usuario cuando se proporciona un nombre de usuario válido (4ms)

Grupos de pruebas: 1 aprobado, 1 en total
Pruebas: 2 aprobadas, 2 en total
Instantáneas: 0 en total
Tiempo: 6.693s
Ejecutó todas las suites de prueba.

Prueba de JavaScript con Jest Summary

En resumen, hemos aprendido algunos de los siguientes conceptos relacionados con las pruebas.

  • Escribir código para probar el código de la aplicación se conoce como prueba automatizada.
  • Las pruebas ayudan a entregar software con menos errores y mayor calidad.
  • Las pruebas le ayudan a refactorizar con confianza.
  • Jest es un marco de prueba robusto que tiene todo lo que necesita para probar JavaScript.
  • Hay tres tipos de pruebas automatizadas:
    • Pruebas unitarias: prueba una pequeña unidad de una aplicación sin recursos externos como una base de datos.
    • Pruebas de integración: pruebe la aplicación con todos los recursos externos en su lugar.
    • Pruebas funcionales / de extremo a extremo: pruebe la aplicación a través de su interfaz de usuario.
  • Si las pruebas son demasiado generales, no garantizarán que su código funcione. Si son demasiado específicos, tienden a romperse con demasiada facilidad. Por lo tanto, apunte a pruebas que no sean ni demasiado generales ni demasiado específicas.
  • Puede utilizar las funciones de Mock para aislar el código de la aplicación de sus recursos externos.
  • Funciones de Jest Matcher que puede usar en sus pruebas:
    • // Igualdad
      espera (…) .toBe ();
      esperar (…) .toEqual ();
    • // Verdad
      esperar (…) .toBeDefined ();
      esperar (…) .toBeNull ();
      esperar (…) .toBeTruthy ();
      esperar (…) .toBeFalsy ();
    • // Los números
      esperan (…) .toBeGreaterThan ();
      esperar (…) .toBeGreaterThanOrEqual ();
      esperar (…) .toBeLessThan ();
      esperar (…) .toBeLessThanOrEqual ();
    • // Las cadenas
      esperan (…) .toMatch (/ regularExp /);
    • // Las matrices
      esperan (…) .toContain ();
    • // Objetos
      esperan (…) .toBe (); // para referencias a objetos,
      esperar (…) .toEqual (); // para igualdad de propiedades
      esperar (…) .toMatchObject ();
    • // Las excepciones
      esperan (() => {algún código}). ToThrow ();



Publicar un comentario

0 Comentarios