Jest: L'exécution de `jest-cli` global devrait avertir au lieu d'une erreur

Créé le 14 juil. 2016  ·  3Commentaires  ·  Source: facebook/jest

L' appel process.exit(1) déclenché lors de l'exécution d'une version mondialement installée de Jest donne des résultats de test étranges - même lorsque tous les tests réussissent, le processus renvoie un code de sortie différent de zéro, et on ne sait pas immédiatement pourquoi.

Lorsque jest est affecté à npm test (ce qui est une convention assez courante), vous obtenez :

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.

Il n'y a pas de détails évidents (la ligne "Veuillez exécuter..." ne ressemble pas à un message d'erreur") et aucun test n'a échoué, le débogage est donc difficile.

Recommandations

  1. Je préférerais supprimer entièrement le test pour une version locale du package de Jest de getJest . Si les gens veulent utiliser une version non locale de Jest sans exécuter npm install , je ne sais pas pourquoi le paquet devrait s'en soucier ?
  2. Si le test est suffisamment utile pour rester, il doit utiliser console.warn sans affecter le code de sortie car les tests peuvent toujours s'exécuter sans problème, et l'avertissement est une indication suffisante que la sortie peut ne pas refléter exactement ce que l'utilisateur voulait.
  3. Si le retour d'un code de sortie différent de zéro est préféré, le test devrait lancer un vrai Error pour faciliter le débogage - La gestion des erreurs intégrée de Node est beaucoup plus explicite que console.error suivi de process.exit(1) .
  4. Si vous ne voulez vraiment pas générer d'erreur, appelez process.exit(1) immédiatement plutôt que d'attendre que tous les tests s'exécutent. ne cours pas du tout.

Commentaire le plus utile

@mmcgahan @cpojer Je vois cette erreur non fatale lors de l'exécution de Jest dans un package enfant dans un monorepo d'espaces de travail de fil. On dirait qu'il est peut-être affiché par erreur parce que la façon dont vous recherchez jest ne traite pas des packages hissés à la racine monorepo?

Tous les 3 commentaires

Merci d'avoir soulevé cette question et pour la description détaillée du problème. Pour être honnête, j'ai moi-même été contrarié par ce genre de choses et cela rend définitivement la suite de tests de Jest un peu plus difficile à gérer.

Je suis également d'accord que la façon dont cela fonctionne actuellement n'a aucun sens si Jest finit toujours par exécuter des tests de toute façon. Je suis désolé que vous ayez perdu du temps là-dessus.

Seriez-vous prêt à envoyer une pull request ?

Ma proposition est la suivante :

  • Supprimer process.exit(1) .
  • Faites process.on('exit', () => console.log(chalk.red('The error message '))) pour que nous obtenions un joli message rouge à la fin d'un test vous indiquant que quelque chose n'est pas tout à fait comme il le devrait.

Cela permettra aux gens d'utiliser la mauvaise version de Jest (ce qui n'est pas recommandé, car il pourrait y avoir des changements de rupture), mais cela terminera toujours le test correctement et imprimera un message en bas. Qu'est-ce que tu penses?

@cpojer Cela fonctionne pour moi, merci pour la réponse rapide ! Soumettra le PR sous peu

@mmcgahan @cpojer Je vois cette erreur non fatale lors de l'exécution de Jest dans un package enfant dans un monorepo d'espaces de travail de fil. On dirait qu'il est peut-être affiché par erreur parce que la façon dont vous recherchez jest ne traite pas des packages hissés à la racine monorepo?

Cette page vous a été utile?
0 / 5 - 0 notes