Wie testet man ein Tool, das Befehlszeilenargumente verwendet, in Einheiten

9

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?

    
Rob Johansen 23.11.2015, 18:41
quelle

3 Antworten

15

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.

    
Ates Goral 23.11.2015, 18:57
quelle
6

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:

%Vor%     
Peter Lyons 23.11.2015 18:57
quelle
0
  

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 .

    
Lloyd 04.02.2018 17:40
quelle