Ich verwende Mokka, um Komponententests für ein Tool zu schreiben, das die Befehlszeilenargumente NPM-Modul. Leider werden die Optionen, die für Mocha vorgesehen sind, von Befehlszeilenargumenten in meinem Tool übernommen, was pflichtgemäß einen Fehler auslöst, wenn diese Optionen in meinem Tool nicht vorhanden sind. Zum Beispiel, wenn ich das tue ...
%Vor%... dann gibt command-line-args folgendes aus:
UNKNOWN_OPTION: Unbekannte Option: --watch
Ich kann das Problem umgehen, indem ich so etwas in meinem Tool mache ...
%Vor% ... aber dann sagt cli.getUsage()
, dass mein Werkzeug eine Option watch
hat, die es nicht wirklich hat. Und das kommt natürlich außer Kontrolle, wenn ich mehr Optionen an Mocha weitergeben will.
Was ist der beste Weg, Befehlszeilenargumente zu "sagen", die Optionen in meinem Szenario zu ignorieren?
Sie sollten Ihr Werkzeug in einen Kernteil aufteilen, der ein Konfigurationsobjekt und einen Befehlszeilen-Wrapper, der diesen Kernteil verwendet, übernimmt. Dann testen Sie einfach den Kernteil.
Ihr Ziel sollte es wirklich sein, den Kernteil zu testen, den Sie geschrieben haben; und nicht das Modul command-line-args
auszuprobieren / zu testen, auf das man theoretisch vertrauen sollte, da es bereits bewiesen hat, dass es von seinem Autor funktioniert.
Ich würde den Einstiegspunktcode in Ihre CLI-App schreiben, so dass er explizit ein Array von Strings als Argumente verwenden kann, wobei nur process.argv
direkt als Standard verwendet wird. Dann können Sie verschiedene Argumentlisten für Unit-Testing-Zwecke übergeben, aber immer noch das Richtige tun, wenn Sie in der Produktion laufen. Pseudocode:
Was ist der beste Weg, Befehlszeilenargumente zu "sagen", die Optionen in meinem Szenario zu ignorieren?
Durch Setzen der Flags partial
oder stopAtFirstUnknown
in den Optionen commandLineArgs
. Beispielverwendung in einem Mokkascript hier . Vollständige Dokumentation hier .
Tags und Links node.js command-line-arguments mocha command-line-args