Estoy usando esta configuración: Estambul/Mocha/Chai/supertest (para pruebas de http)/sinon (para pruebas de temporizador) pero tengo algunos problemas con las herramientas de CLI de prueba
Mi pregunta es simple: ¿Cómo puedo probar mi programa CLI y lograr al mismo tiempo una cobertura de código del 100 % con Estambul? No importa qué herramienta esté utilizando, ¡me gustaría entender cómo lo está haciendo, por favor!
Encontré este artículo que fue muy útil al principio pero
salud
Esto se hará en 2 pasos:
nyc (la razón para cambiar de istanbul a nyc se explica a continuación) para revisar los archivos de script detrás de su herramienta CLITuve que configurar algunas pruebas CLI hace unos meses en Fulky (el proyecto está en pausa en este momento pero es temporal) y escribí mi conjunto de pruebas como tal:
const expect = require('chai').expect; const spawnSync = require('child_process').spawnSync; describe('Executing my CLI tool', function () { // If your CLI tool is taking some expected time to start up / tear down, you // might want to set this to avoid slowness warnings. this.slow(600); it('should pass given 2 arguments', () => { const result = spawnSync( './my-CLI-tool', ['argument1', 'argument2'], { encoding: 'utf-8' } ); expect(result.status).to.equal(0); expect(result.stdout).to.include('Something from the output'); }); });Puede ver un ejemplo aquí , pero tenga en cuenta que este es un archivo de prueba ejecutado con Mocha , que ejecuta Mocha en un proceso generado . Un poco de Inception para su necesidad aquí, por lo que puede ser confuso, pero está probando un complemento de Mocha, por lo tanto, el juego mental agregado. Sin embargo, eso debería aplicarse a su caso de uso si se olvida de esa complejidad.
Luego querrá instalar nyc con npm i nyc --save-dev , la herramienta CLI actual para Estambul, porque a diferencia de la CLI anterior ( istanbul en sí), permite la cobertura de aplicaciones que generan subprocesos. Lo bueno es que sigue siendo la misma herramienta, el mismo equipo, etc. detrás de nyc , por lo que el cambio es realmente trivial (por ejemplo, vea esta transición ).
En su package.json , luego agregue a sus scripts :
"scripts": { "coverage": "nyc mocha" } Luego obtendrá un informe con npm run coverage (probablemente tendrá que configurar la opción de reporter en .nycrc ) que también pasa por sus scripts CLI.
No configuré esta parte de cobertura con el proyecto mencionado anteriormente, pero acabo de aplicar estos pasos localmente y funciona como se esperaba, así que lo invito a probarlo por su parte.