Transportador: conceptos de pruebas de JavaScript
Dado que el conocimiento de JavaScript es esencial para trabajar con Transportador, en este capítulo, comprendamos los conceptos de las pruebas de JavaScript en detalle.
Pruebas y automatización de JavaScript
JavaScript es el lenguaje de secuencias de comandos interpretado y escrito dinámicamente más popular, pero la tarea más desafiante es probar el código. Se debe a que, a diferencia de otros lenguajes compilados como JAVA y C ++, no hay pasos de compilación en JavaScript que puedan ayudar al evaluador a descubrir errores. Además, las pruebas basadas en navegador requieren mucho tiempo; por lo tanto, existe la necesidad de herramientas que admitan las pruebas automatizadas para JavaScript.
Conceptos de pruebas automatizadas
Siempre es una buena práctica escribir la prueba porque mejora el código; el problema con las pruebas manuales es que consume un poco de tiempo y es propenso a errores. El proceso de prueba manual también es bastante aburrido para el programador, ya que necesita repetir el proceso, escribir especificaciones de prueba, cambiar el código y actualizar el navegador varias veces. Además, las pruebas manuales también ralentizan el proceso de desarrollo.
Por las razones anteriores, siempre es útil tener algunas herramientas que puedan automatizar estas pruebas y ayudar a los programadores a deshacerse de estos pasos repetitivos y aburridos. ¿Qué debe hacer un desarrollador para automatizar el proceso de prueba?
Básicamente, un desarrollador puede implementar el conjunto de herramientas en el CLI (Command Line Interpreter) o en el IDE de desarrollo (entorno de desarrollo integrado). Luego, estas pruebas se ejecutarán continuamente en un proceso separado incluso sin la entrada del desarrollador. Las pruebas automatizadas de JavaScript tampoco son nuevas y se han desarrollado muchas herramientas como Karma, Protractor, CasperJS, etc.
Tipos de pruebas para JavaScript
Puede haber diferentes pruebas para diferentes propósitos. Por ejemplo, algunas pruebas se escriben para verificar el comportamiento de funciones en un programa, mientras que otras se escriben para probar el flujo de un módulo o característica. Por lo tanto, tenemos los siguientes dos tipos de pruebas:
Examen de la unidad
La prueba se realiza en la parte comprobable más pequeña del programa llamada unidad. La unidad se prueba básicamente de forma aislada sin ningún tipo de dependencia de esa unidad de las otras partes. En el caso de JavaScript, el método o función individual que tiene un comportamiento específico puede ser una unidad de código y estas unidades de código deben probarse de forma aislada.
Una de las ventajas de las pruebas unitarias es que la prueba de las unidades se puede realizar en cualquier orden porque las unidades son independientes entre sí. Otra ventaja de las pruebas unitarias que realmente cuenta es que puede ejecutar la prueba en cualquier momento de la siguiente manera:
- Desde el comienzo del proceso de desarrollo.
- Después de completar el desarrollo de cualquier módulo / función.
- Después de modificar cualquier módulo / función.
- Después de agregar cualquier característica nueva en la aplicación existente.
Para las pruebas unitarias automatizadas de aplicaciones JavaScript, podemos elegir entre muchas herramientas y marcos de prueba como Mocha, Jasmine y QUnit.
Pruebas de extremo a extremo
Puede definirse como la metodología de prueba utilizada para probar si el flujo de la aplicación de principio a fin (de un extremo a otro) está funcionando bien según el diseño.
Las pruebas de extremo a extremo también se denominan pruebas de función / flujo. A diferencia de las pruebas unitarias, las pruebas de un extremo a otro prueban cómo los componentes individuales funcionan juntos como una aplicación. Ésta es la principal diferencia entre las pruebas unitarias y las pruebas de extremo a extremo.
Por ejemplo, supongamos que si tenemos un módulo de registro donde el usuario necesita proporcionar información válida para completar el registro, entonces la prueba E2E para ese módulo en particular seguirá los siguientes pasos para completar la prueba:
- Primero, cargará / compilará el formulario o módulo.
- Ahora, obtendrá el DOM (modelo de objetos de documento) de los elementos del formulario.
- A continuación, active el evento de clic del botón de envío para verificar si está funcionando o no.
- Ahora, para fines de validación, recopile el valor de los campos de entrada.
- A continuación, se deben validar los campos de entrada.
- Con fines de prueba, llame a una API falsa para almacenar los datos.
Cada paso da sus propios resultados que se compararán con el conjunto de resultados esperado.
Ahora, la pregunta que surge es, si bien este tipo de E2E o pruebas funcionales también se pueden realizar manualmente, ¿por qué necesitamos automatización para esto? La razón principal es que la automatización facilitará este proceso de prueba. Algunas de las herramientas disponibles que se pueden integrar fácilmente con cualquier aplicación, para tal fin son Selenium, PhantomJS y Protractor.
Herramientas de prueba y marcos
Tenemos varias herramientas de prueba y marcos para pruebas angulares. Las siguientes son algunas de las herramientas y marcos más conocidos:
Karma
Karma, creado por Vojta Jina, es un corredor de pruebas. Originalmente este proyecto se llamó Testacular. No es un marco de prueba, lo que significa que nos brinda la capacidad de ejecutar pruebas unitarias de JavaScript de manera fácil y automática en navegadores reales. Karma se creó para AngularJS porque antes de Karma no existía una herramienta de prueba automatizada para los desarrolladores de JavaScript basados en la web. Por otro lado, con la automatización proporcionada por Karma, los desarrolladores pueden ejecutar un solo comando simple y determinar si un conjunto de pruebas completo ha pasado o no.
Ventajas de usar Karma
Las siguientes son algunas ventajas del uso de Karma en comparación con el proceso manual:
- Automatiza las pruebas en varios navegadores y dispositivos.
- Supervisa los archivos en busca de errores y los corrige.
- Proporciona soporte y documentación en línea.
- Facilita la integración con un servidor de integración continua.
Contras de usar karma
Los siguientes son algunos de los inconvenientes de usar Karma:
La principal desventaja de usar Karma es que requiere una herramienta adicional para configurar y mantener.
Si está utilizando el ejecutor de pruebas de Karma con Jasmine, hay menos documentación disponible para encontrar información sobre cómo configurar su CSS en el caso de tener varios identificadores para un elemento.
Jazmín
Jasmine, un marco de desarrollo basado en el comportamiento para probar código JavaScript, se desarrolla en Pivotal Labs. Antes del desarrollo activo del marco Jasmine, Pivotal Labs también desarrolló un marco de prueba unitario similar llamado JsUnit, que tiene un corredor de pruebas incorporado. Las pruebas de los navegadores se pueden ejecutar a través de las pruebas de Jasmine al incluir el archivo SpecRunner.html o al usarlo también como un corredor de pruebas de línea de comandos. También se puede utilizar con o sin Karma.
Ventajas de usar Jasmine
Los siguientes son algunos pros de usar Jasmine:
Un marco independiente del navegador, la plataforma y el idioma.
Admite el desarrollo impulsado por pruebas (TDD) junto con el desarrollo impulsado por el comportamiento.
Tiene integración predeterminada con Karma.
Sintaxis fácil de entender.
Proporciona espías de prueba, falsificaciones y funcionalidades de paso que ayudan con las pruebas como funciones adicionales.
Contras de usar Jasmine
La siguiente es una desventaja de usar Jasmine:
El usuario debe devolver las pruebas a medida que cambian porque no hay una función de observación de archivos disponible en Jasmine mientras se ejecuta la prueba.
Moca
Mocha, escrito para aplicaciones Node.js, es un marco de prueba pero también admite pruebas de navegador. Es bastante parecido a Jasmine, pero la principal diferencia entre ellos es que Mocha necesita algún complemento y biblioteca porque no puede ejecutarse de forma independiente como marco de prueba. Por otro lado, Jasmine es independiente. Sin embargo, Mocha es más flexible de usar que Jasmine.
Ventajas de usar Mocha
Las siguientes son algunas ventajas del uso de Mocha:
- Mocha es muy fácil de instalar y configurar.
- Documentación sencilla y fácil de usar.
- Contiene complementos con varios proyectos de nodos.
Contras de usar Mocha
Los siguientes son algunos contras de usar Mocha:
- Necesita módulos separados para afirmaciones, espías, etc.
- También requiere una configuración adicional para usar con Karma.
QUnit
QUint, desarrollado originalmente por John Resig en 2008 como parte de jQuery, es un conjunto de pruebas unitarias de JavaScript potente pero fácil de usar. Se puede utilizar para probar cualquier código JavaScript genérico. Aunque se centra en probar JavaScript en el navegador, es muy conveniente para el desarrollador.
Ventajas de usar QUnit
Las siguientes son algunas ventajas de usar QUnit:
- Fácil de instalar y configurar.
- Documentación sencilla y fácil de usar.
Contras de usar QUnit
La siguiente es una desventaja de usar QUnit:
- Se desarrolló principalmente para jQuery y, por lo tanto, no es tan bueno para usar con otros marcos.
Selenio
El selenio, desarrollado originalmente por Jason Huggins en 2004 como una herramienta interna en ThoughtWorks, es una herramienta de automatización de pruebas de código abierto. Selenium se define a sí mismo como “Selenium automatiza los navegadores. ¡Eso es!". La automatización de los navegadores significa que los desarrolladores pueden interactuar con los navegadores muy fácilmente.
Ventajas de usar selenio
Las siguientes son algunas ventajas del uso de selenio:
- Contiene un gran conjunto de funciones.
- Admite pruebas distribuidas.
- Tiene soporte SaaS a través de servicios como Sauce Labs.
- Fácil de usar con documentación sencilla y abundantes recursos disponibles.
Contras de usar selenio
Las siguientes son algunas de las desventajas de usar Selenium:
- Una de las principales desventajas de usar Selenium es que debe ejecutarse como un proceso separado.
- La configuración es un poco engorrosa ya que el desarrollador debe seguir varios pasos.