Der process.exit(1)
Aufruf, der beim Ausführen einer global installierten Version von Jest ausgelöst wird, führt zu seltsamen Testergebnissen – selbst wenn alle Tests erfolgreich sind, gibt der Prozess einen Exit-Code ungleich Null zurück, und es ist nicht sofort klar, warum.
Wenn jest
npm test
zugewiesen wird (was eine ziemlich übliche Konvention ist), erhalten Sie:
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.
Es gibt keine offensichtlichen Details (die Zeile "Bitte ausführen..." sieht nicht wie eine Fehlermeldung aus) und keine fehlgeschlagenen Tests, daher ist das Debuggen umständlich.
Empfehlungen
getJest
vollständig zu entfernen. Wenn Leute eine nicht-lokale Version von Jest verwenden möchten, ohne npm install
, bin ich mir nicht sicher, warum das Paket interessiert sein sollte?console.warn
ohne den Exit-Code zu beeinträchtigen, da die Tests weiterhin ohne Probleme ausgeführt werden können und die Warnung ein ausreichender Hinweis darauf ist, dass die Ausgabe möglicherweise nicht genau das widerspiegelt, was der Benutzer beabsichtigt hat.Error
ausgeben, um das Debuggen zu vereinfachen. Die integrierte Fehlerbehandlung von Node ist viel expliziter als console.error
gefolgt von process.exit(1)
.process.exit(1)
sofort auf, anstatt zu warten, bis alle Tests ausgeführt wurden läuft überhaupt nicht.Vielen Dank für den Hinweis und die ausführliche Beschreibung des Problems. Um ehrlich zu sein, habe ich mich selbst über dieses Zeug aufgeregt und es macht Jests Testsuite definitiv etwas schwieriger zu handhaben.
Ich stimme auch zu, dass die Art und Weise, wie dies derzeit funktioniert, keinen Sinn macht, wenn Jest sowieso trotzdem Tests durchführt. Es tut mir leid, dass Sie damit Zeit verschwendet haben.
Wären Sie bereit, einen Pull-Request zu senden?
Mein Vorschlag ist wie folgt:
process.exit(1)
entfernen.process.on('exit', () => console.log(chalk.red('The error message ')))
damit wir am Ende eines Testlaufs eine schöne rote Nachricht erhalten, die Ihnen mitteilt, dass etwas nicht so ist, wie es sollte.Es erlaubt Benutzern, die falsche Version von Jest zu verwenden (was nicht empfohlen wird, da es möglicherweise wichtige Änderungen gibt), aber es wird den Testlauf dennoch ordnungsgemäß beenden und eine Nachricht unten ausgeben. Was denken Sie?
@cpojer Das funktioniert bei mir, danke für die schnelle Antwort! Werde die PR in Kürze einreichen
@mmcgahan @cpojer Ich jest
suchen, nicht damit zu tun hat, dass Pakete in das Monorepo-Root hochgehoben werden?
Hilfreichster Kommentar
@mmcgahan @cpojer Ich
jest
suchen, nicht damit zu tun hat, dass Pakete in das Monorepo-Root hochgehoben werden?