Ich habe eine App, die von Umgebungsvariablen abhängt wie:
const APP_PORT = process.env.APP_PORT || 8080;
und ich möchte das zum Beispiel testen:
- APP_PORT kann durch die Variable env des Knotens festgelegt werden.
- oder dass eine
express
App auf dem Port ausgeführt wird, mit dem festgelegt wurdeprocess.env.APP_PORT
Wie kann ich das mit Jest erreichen? Kann ich diese process.env
Variablen vor jedem Test festlegen oder sollte ich sie vielleicht irgendwie verspotten?
node.js
testing
environment-variables
jestjs
Tomasz Mularczyk
quelle
quelle
Antworten:
Die Art und Weise, wie ich es getan habe, kann in dieser SO-Frage gefunden werden .
Es ist wichtig, die Module vor jedem Test zurückzusetzen und das Modul dann dynamisch in den Test zu importieren:
Wenn Sie nach einer Möglichkeit suchen, env-Werte zu laden, bevor Sie den Jest ausführen, suchen Sie nach der folgenden Antwort . Sie sollten dafür setupFiles verwenden .
quelle
delete process.env.NODE_ENV;
ist nur ein Überbleibsel aus meinem Code und sollte in Ihrem Fall keine Rolle spielen. Was zählt, ist, dass Siejest.resetModules()
vor dem Test aufrufen und danach das ursprüngliche process.env-Objekt (OLD_ENV) wiederherstellenJest's
setupFiles
ist der richtige Weg, um damit umzugehen, und Sie müssen weder ein installierendotenv
noch ein verwenden.env
Datei , damit sie funktioniert.jest.config.js
::.jest/setEnvVars.js
::Das ist es.
quelle
In
./package.json
:In
./jest/setEnvVars.js
:quelle
Sie können die
setupFiles
Funktion der Scherzkonfiguration verwenden. Wie die Dokumentation sagte ,npm install dotenv
dotenv, mit dem auf die env-Variable zugegriffen wird..env
Datei im Stammverzeichnis Ihrer Anwendung und fügen Sie diese Zeile hinzu.jest.config.js
Datei wie folgtquelle
Eine andere Möglichkeit besteht darin, es
jest.config.js
nach dermodule.exports
Definition zur Datei hinzuzufügen :Auf diese Weise müssen die
ENV
Variablen nicht in jeder.spec
Datei definiert werden, und sie können global angepasst werden.quelle
Abhängig davon, wie Sie Ihren Code organisieren können, kann eine andere Option darin bestehen, die env-Variable in eine Funktion einzufügen, die zur Laufzeit ausgeführt wird.
In dieser Datei wird die env-Variable zum Zeitpunkt des Imports festgelegt und erfordert dynamische
require
s, um verschiedene env-Variablen zu testen (wie in dieser Antwort beschrieben ):In dieser Datei wird die env var zur
envMessage
Ausführungszeit festgelegt, und Sie sollten in der Lage sein, process.env direkt in Ihren Tests zu mutieren:Scherztest:
quelle
Ich denke, Sie könnten das auch versuchen:
Das funktioniert bei mir und Sie brauchen keine Modulsachen
quelle
Meiner Meinung nach ist es viel sauberer und verständlicher, wenn Sie das Abrufen von Umgebungsvariablen in ein Util extrahieren (Sie möchten wahrscheinlich eine Überprüfung einschließen, die schnell fehlschlägt, wenn eine Umgebungsvariable sowieso nicht festgelegt ist), dann können Sie das Util einfach verspotten .
quelle
Erweitern Sie die Antwort von Serhan C. ( https://stackoverflow.com/a/57944454/2708174) ein wenig ) ...
Laut diesem Blog https://tekloon.dev/using-dotenv-with-jest können Sie
"dotenv/config"
direkt einbindensetupFiles
, ohne ein externes Skript erstellen und referenzieren zu müssen, das aufruftrequire("dotenv").config()
.dh einfach tun
quelle