Ich schreibe Testfälle für meine Node.js-Anwendung mit Mocha. Die Testfälle benötigen einen API-Schlüssel als zusätzliche Eingabeoption oder Parameter. Der API-Schlüssel ist privat, daher möchte ich ihn nicht direkt in die Testdateien aufnehmen, da jeder ihn dann auf GitHub sehen kann. Ich weiß, dass es für Mokka einige Optionen gibt:
Aber ist es möglich, einige Parameter einzuschließen, damit Tester ihren eigenen API-Schlüssel für den Test in der Befehlszeile angeben können? Sowie:
./node_modules/mocha/bin/mocha test/*.js --key YOUR_KEY
env KEY1=YOUR_KEY1 KEY2=YOUR_KEY2 mocha test
Schauen Sie sich das Optimistenmodul von Substack und nconf von flatiron an. Viele meiner Tests hängen von externen Parametern ab, und die Module optimist und nconf erleichtern das Laden von Konfigurationsoptionen aus einer JSON-Datei
Übergeben Sie in Ihrem Testbefehl den Pfad zur Datei config.json
Testbefehl
api-test.js
config.json
Alternative
Ein anderes Muster, das ich kürzlich verwendet habe, ist das Konfigurationsmodul . Sie können eine
./config/default.yml
Datei für die regelmäßige Ausführung und eine./config/test.yml
Datei für Tests angeben .Wenn Sie Ihre Testsuite ausführen, exportieren Sie NODE_ENV = test und das Konfigurationsmodul wird geladen
test.yml
In Ihrem Code ist es einfach, auf das Konfigurationsobjekt zuzugreifen
Eine einfache Möglichkeit, NODE_ENV = test zu setzen, besteht darin, Ihre Tests mit einem Makefile auszuführen. Führen Sie alle Ihre Tests über aus
make test
. Um einen einzelnen Test auszuführen, führen Sie ihn ausmake one NAME=test/unit/sample-test.js
Beispiel-Makefile
quelle
Eine der einfachsten Möglichkeiten, Parameter zu übergeben, die der in diesem Thread erwähnten Methode process.argv [index] ähneln, ist die Verwendung der Konfigurationsvariablen npm. Auf diese Weise können Sie den Variablennamen etwas deutlicher sehen:
Testbefehl:
package.json:
test.js
quelle
npm ---somevar=myval --anothervar = anotherVal run mytest
mitprocess.env.npm_config_somevar
und versuchtprocess.env.npm_config_anothervar
?Die anderen Antworten sind insofern eingeschränkt, als sie die Codeausführung vor dem Ausführen Ihrer Testsuite nicht unterstützen. Sie unterstützen nur die Übergabe von Parametern.
Diese Antwort unterstützt die Codeausführung, BEVOR Ihre Testsuite ausgeführt wird und vollständig von Mocha dokumentiert wird
Mokka-Dokumente: http://unitjs.com/guide/mocha.html#mocha-opts
Erstellen Sie ./test/mocha.opts
Erstellen Sie ./server.bootstrap.js
Erstellen Sie ./test/test.bootstrap.js
endlich in deiner server.js:
GETAN!
Der Code im Server-Bootstrap wird vor dem Testen und der Serverausführung ausgeführt (npm start und npm test).
Der Code im Test-Bootstrap wird nur vor dem Test ausgeführt (npm-Test).
Vielen Dank an @damianfabian für diesen einen - siehe Wie initialisiere ich eine globale Variable in Unit-Testläufen?
quelle
Es gibt keine unterstützte Möglichkeit, dies mit Mokka zu tun. Die vorgeschlagene Methode besteht darin, eine Datei (z. B. config.json) zu verwenden, sie zu benötigen und von anderen Personen ändern zu lassen.
Wenn Sie Ihren Schlüssel jedoch am Ende der Befehlszeile (nach der zu testenden Datei) übergeben und verwenden, sollte er mit process.argv verfügbar sein (wenn Sie ihn nicht verwenden - oder nicht nach einer regulären Datei Name, dann wird Mokka versagen).
Wenn Sie ausführen
./node_modules/mocha/bin/mocha --reporter spec test.js --apiKey=someKey
und test.js den folgenden Code enthält:Der Test sollte bestehen
quelle
Sie können ein Argument mit dem Modul 'minimist' an das Mokka-Testskript übergeben. Installieren mit
npm install minimist
Terminal:
Mokka-Knotenskript:
quelle
Eine einfache Möglichkeit, process.argv zu verwenden, die die Befehlszeilenargumente enthält
Später können Sie
YOUR_VALUE
Ihren Code eingeben:Um alle zu sehen
process.argv
:Ausgabe:
quelle
mocha -w test/*.js --KEY=YOUR_VALUE
stattdessen nennen--KEY=YOUR_KEY
?Ich könnte Parameter Gedanken mochaStream senden (erfordern ('spawn-mocha-parallel'). MochaStream).
mögen:
In der Datei ..spec.js
quelle
Ich habe einige Antworten gelesen, von denen die meisten komplexer sind, als die eigentliche Lösung sein muss.
Nehmen wir an, ich habe
config.yml
oderconfig.json
. In meinem Fall ist es eine YAML-Datei.Zunächst installiere ich die
yamljs
Abhängigkeit. Es hat eine Funktion namensload
.Grundsätzlich was ich mache:
const YAML = require('yamljs'); const ymlConfig = YAML.load('./config.yml');
Dann gehe ich für:
process.env.setting1 = ymlConfig.setting1; process.env.setting2 = ymlConfig.setting2;
Und natürlich - das alles geschieht in Ihrer Testdatei.
quelle
Wenn Sie mit der Mocha-Seitenleiste (VS-Code-Erweiterung) debuggen / testen, geben Sie einfach Folgendes ein:
beim
.vscode/settings.json
quelle