¿Hay alguna manera de afirmar la cantidad de pruebas que ha realizado mocha?
Por ejemplo, algo como:
afterAllTests(() => { expect(mocha.numTestsRun).to.be.greaterThan(400); }); Recientemente actualicé de mocha 7.1.2 a 9.1.3 y el argumento abreviado -R dejó de funcionar. Mi conjunto de pruebas pasó de ejecutar ~ 400 pruebas a ejecutar solo ~ 10 pruebas de nivel superior. Cambiar de nuevo a --recursive solucionó el problema, pero me gustaría asegurarme de que algo así no vuelva a suceder.
Mi package.json se parece a esto:
{ "scripts": { "integrationTest": "mocha --recursive spec test/integration", } }En lugar de contar la cantidad de pruebas que se han realizado hasta ahora, contaría la cantidad de pruebas que se han declarado con Mocha. Esto garantiza que la verificación del número total de pruebas siga siendo válida independientemente del orden de ejecución.
Para calcular la cantidad total de pruebas, debemos contar la cantidad de pruebas declaradas en el conjunto de nivel superior y en todos sus subconjuntos de forma recursiva (no hay atajo AFAIK).
Comenzamos declarando una nueva prueba (se puede colocar en cualquier lugar) con el único propósito de contar el número total de pruebas.
En esta prueba , podemos obtener la suite contenedora con this.runnable().parent . La suite, a su vez, también tiene una propiedad parent que se puede usar para obtener la siguiente suite superior, hasta la suite de nivel superior (que Mocha define implícitamente). La suite de nivel superior tiene una root de propiedad establecida en true .
Ahora, la suite de nivel superior, como cualquier otra suite, tiene tests de propiedades y suites que se pueden usar para ramificarse a través de todas las suites descendientes y contar el número total de pruebas declaradas.
it('total number of tests should be > 400', function() { // Use `function()`, don't use `() =>`... let suite0 = this.runnable().parent; // ...because we need to access `this`. while (!suite0.root) suite0 = suite0.parent; // suite0 is now the top-level suite // Recursiveliy count the number of tests in each suite const countTests = (cnt, suite) => suite.suites.reduce(countTests, cnt + suite.tests.length); const totalTests = countTests(0, suite0); expect(totalTests).to.be.greaterThan(400); }); Esto contará todas las pruebas, incluidas las marcadas como skip (pero supongo que eso es lo que quieres).
Tenga en cuenta también que, obviamente, la prueba de conteo de pruebas en sí misma solo funciona siempre que no olvide incluirla cuando ejecute Mocha. Mover la lógica de prueba a un nivel superior before o after del gancho no cambiará mucho, porque esos ganchos tienen la misma visibilidad que las pruebas declaradas en el mismo ámbito. Podría poner esa prueba en un archivo que está justo dentro de la carpeta de spec , por lo que se ejecutará incluso sin el indicador --recursive . Como último recurso, puede establecer la cantidad de pruebas en una variable de entorno y verificar ese valor fuera de Mocha.