Entonces, en 2019, eso es exactamente lo que construí. Construí esto alrededor de Mocha. Honestamente, probablemente no hice demasiada investigación. Parecía popular, y sabía que podía ejecutar pruebas tanto en Node.js como en un navegador. Y se usaba en otros lugares de nuestra organización.
Y el CLI de Mocha, básicamente, esta es una diapositiva sobre la arquitectura simplificada de Mocha. Básicamente, una vez que ejecutas el CLI, instancias un corredor, que requiere los archivos de prueba, y luego comienza la ejecución. Y el progreso de las pruebas aprobadas y fallidas se emite a través de eventos de vuelta al CLI, que luego se retransmite a los reporteros. Y nombré mi herramienta Mocha Remote basándome en esto. No es tan popular como Mocha, como puedes ver, pero y en su mayoría son 900 descargas semanales. La mayoría de ellas son probablemente nuestro CI. Y esta es parte de la razón por la que quiero compartir esta historia hoy.
Intenté reutilizar el CLI de Mocha, pero encontré difícil extenderlo porque el corredor en sí no es extensible o no es posible configurarlo desde el CLI de Mocha, pero afortunadamente fue muy fácil de implementar, re-implementar eso, y el CLI de Mocha Remote ahora soporta casi todas las opciones que puedes pasar a Mocha, incluyendo la búsqueda de un título de prueba, incluyendo tiempos de espera, especificando reporteros, observando, y luego también un contexto, que yo mostraré más tarde.
Así que el corredor de Mocha, el corredor original de Mocha, en realidad pude empaquetarlo en una variante independiente del tiempo de ejecución usando webpack, y esto es lo que se ejecuta en las diversas plataformas. En lugar de simples eventos, usando la emisión de eventos, usamos una conexión WebSocket entre el corredor, el cliente y el servidor del CLI de Mocha Remote. Y una vez que el cliente se conecta al servidor, recibirá un mensaje para comenzar a ejecutar las pruebas. El cliente o el corredor ejecutará una función de prueba suministrada por el desarrollador, que básicamente definirá las pruebas ya sea importándolas o definiéndolas en línea. Y una vez que el corredor de pruebas comienza a ejecutarse, comenzará a enviar estos eventos de pruebas aprobadas y fallidas a través de un socket web de vuelta al CLI, que se propaga a los reporteros.
Esto es lo que parece cuando invocas el CLI de Mocha Remote, y puedes ver que buscamos todas las pruebas que tienen conexiones en el título, y también suministramos este contexto, en caso de una URL de API, que se propaga a través de este sistema al corredor, y lo mostraré en un segundo. También suministramos el subcomando noderuntestappjs, que es responsable de iniciar la aplicación de prueba. Y la vida de este subcomando y el CLI de Mocha Remote están vinculados de tal manera que si el subcomando sale prematuramente, el CLI de Mocha Remote también saldrá. Y por y viceversa. Así que también asegura que el código de estado correcto se propague cuando las pruebas fallan en el dispositivo o el dispositivo se bloquea o lo que sea, el CLI de Mocha Remote obtendrá el correcto código de salida no cero.
Genial. Creo que casi es hora de las demostraciones. Solo quiero mostrar aquí, esto es lo que parece en un cliente. Obtiene la prueba, o suministras la función de prueba y obtiene un camino de contexto, este argumento, y puedes ver cómo este contexto es capaz de ser usado cuando instancias esta instancia de MyApp. Genial. Quiero mostrar primero la ejecución, invocando el CLI de Mocha Remote aquí en Node.js. Y
Comments