Jest: Ejecutar global `jest-cli` debería advertir en lugar de error

Creado en 14 jul. 2016  ·  3Comentarios  ·  Fuente: facebook/jest

La llamada process.exit(1) activada cuando se ejecuta una versión instalada globalmente de Jest da como resultado resultados de prueba extraños; incluso cuando todas las pruebas pasan, el proceso devuelve un código de salida distinto de cero y no está claro de inmediato por qué.

Cuando jest se asigna a npm test (que es una convención bastante común), se obtiene:

Please run `npm install` to use the version of Jest intended for this project.
...
163 tests passed (163 total in 30 test suites, run time 3.292s)
npm ERR! Test failed.  See above for more details.

No hay detalles obvios (la línea "Ejecutar ..." no parece un mensaje de error ") ni pruebas fallidas, por lo que la depuración es incómoda.

Recomendaciones

  1. Preferiría eliminar la prueba para una versión local de paquete de Jest de getJest completo. Si la gente quiere usar una versión no local de Jest sin ejecutar npm install , no estoy seguro de por qué debería importarle al paquete.
  2. Si la prueba es lo suficientemente útil como para permanecer, debe usar console.warn sin afectar el código de salida porque las pruebas aún pueden ejecutarse sin problemas, y la advertencia es una indicación suficiente de que la salida podría no reflejar exactamente lo que el usuario pretendía.
  3. Si se prefiere devolver un código de salida que no sea cero, la prueba debe arrojar un Error real para facilitar la depuración: el manejo de errores incorporado de Node es mucho más explícito que console.error seguido de process.exit(1) .
  4. Si realmente no desea lanzar un error, llame a process.exit(1) inmediatamente en lugar de esperar a que se ejecuten todas las pruebas; si no está bien ejecutar Jest globalmente cuando falta una dependencia definida localmente, entonces no debería no corro en absoluto.

Comentario más útil

@mmcgahan @cpojer Veo este error no fatal al ejecutar Jest dentro de un paquete secundario dentro de un monorepo de espacios de trabajo de hilo. ¿Siente que tal vez se muestra un error porque la forma en que busca jest no se trata de paquetes que se suben a la raíz de monorepo?

Todos 3 comentarios

Gracias por mencionar este tema y por la descripción detallada del problema. Para ser honesto, yo mismo he estado molesto por estas cosas y definitivamente hace que el conjunto de pruebas de Jest sea un poco más difícil de manejar.

También estoy de acuerdo en que la forma en que esto está funcionando actualmente no tiene ningún sentido si Jest aún termina ejecutando pruebas de todos modos. Lamento que hayas perdido el tiempo en esto.

¿Estarías dispuesto a enviar una solicitud de extracción?

Mi sugerencia es la siguiente:

  • Quitar process.exit(1) .
  • Haz process.on('exit', () => console.log(chalk.red('The error message '))) para que obtengamos un bonito mensaje rojo al final de una ejecución de prueba que te dice que algo no está como debería.

Permitirá que las personas utilicen la versión incorrecta de Jest (que no se recomienda, porque puede haber cambios importantes) pero aún así finalizará la ejecución de prueba correctamente e imprimirá un mensaje en la parte inferior. ¿Qué piensas?

@cpojer Eso me funciona, ¡gracias por la rápida respuesta! Presentará el PR en breve

@mmcgahan @cpojer Veo este error no fatal al ejecutar Jest dentro de un paquete secundario dentro de un monorepo de espacios de trabajo de hilo. ¿Siente que tal vez se muestra un error porque la forma en que busca jest no se trata de paquetes que se suben a la raíz de monorepo?

¿Fue útil esta página
0 / 5 - 0 calificaciones