So verstecken Sie die Ausgabe von console.log von JavaScript in Jest-Tests
Ich habe heute in einer Codebasis gearbeitet, die viele absichtliche console.log
Ausgaben in allen Umgebungen außer der Produktion hatte, sodass sie in der Ausgabe von Jest-Tests auftauchten. Es wäre mühsam gewesen, sie einzeln zu entfernen, und deshalb habe ich mir dieses einfache Setup ausgedacht, um alle console.log
Ausgaben auf einmal zu unterdrücken, während Jest läuft.
Konfigurieren Es gibt
Dieser Trick beruht auf Jests angeborener Fähigkeit, alles zu verspotten. Was wir im Grunde tun werden, ist, die log
Methode des console
Objekts zu verspotten und die anderen Methoden intakt zu lassen.
Wir müssen Jest zuerst anweisen, eine Setup-Datei auszuführen, bevor die Tests ausgeführt werden. Dazu bearbeiten wir die jest.config.js
Datei, die sich normalerweise im Stammverzeichnis Ihres Projekts befindet, mit anderen Konfigurationseigenschaften und fügen die folgende Zeile hinzu:
setupFilesAfterEnv: ['/src/jest.setup.js']
Wir können in Jests Dokumentation nachsehen, was das setupFilesAfterEnv
tut:
Eine Liste von Pfaden zu Modulen, die Code ausführen, um das Testframework zu konfigurieren oder einzurichten, bevor jede Testdatei in der Suite ausgeführt wird.
Wenn wir jetzt unsere Tests ausführen, führen sie zuerst das jest.setup.js
aus, was wir jetzt erstellen werden.
Verspotten von console.log
Erstellen Sie eine Datei an src/setup.js
oder wo immer Sie im vorherigen Schritt Ihren Pfad angegeben haben. Das fügst du dann hinzu:
global.console = {
log: jest.fn(),
debug: console.debug,
trace: console.trace,
}
Dies überschreibt die log
Methode und lässt die anderen zu. Da ich in den Tests trotzdem die Möglichkeit haben wollte, etwas auszugeben, habe ich debug
und gemappt trace
. Sie können andere zuordnen, die Sie möglicherweise benötigen console.table
, z. B. zum Rendern von Elementen in einer Tabelle, die zum Protokollieren von Objekten oder Arrays nützlich sind. Um ehrlich zu sein, hatte ich mir, bis ich dies schrieb, noch nie die Konsolenobjektseite in MDN angesehen, und es gibt viele interessante Methoden wie die console.dir
, die eine interaktive Liste der Eigenschaften des angegebenen JavaScript – Objekts anzeigt.
Schlussworte
Jetzt console.log
wird Ihre Ausgabe unterdrückt, während Ihre Jest-Tests ausgeführt werden. Wenn Sie in einem Team arbeiten, stellen Sie sicher, dass Sie den Rest des Teams über diese Änderung informieren, indem Sie sie dokumentieren, da jemand gestresst sein könnte, wenn er versucht, console.log
etwas zu tun, und es nicht sieht, wo es sein sollte.