2015-11-23 20 views
9

Używam mocha do pisania testów jednostkowych dla narzędzia, które korzysta z modułu npm command-line-args. Niestety, opcje przeznaczone dla mocha są pobierane przez polecenie-argument-argumenty w moim narzędziu, które sumiennie zgłasza błąd, jeśli te opcje nie istnieją w moim narzędziu. Na przykład, jeśli mogę to zrobić ...Jak testować narzędzie, które używa argumentów wiersza poleceń

mocha --watch 

... potem komenda-line-args zgłasza to:

UNKNOWN_OPTION: Nieznana opcja: --watch

I mogę obejść problem, robiąc coś takiego w moim narzędziu ...

var cli = commandLineArgs([ 
    { name: 'verbose', alias: 'v', type: Boolean }, 
    { name: 'timeout', alias: 't', type: Number }, 
    { name: 'watch'} // So I can do mocha --watch 
]); 

... ale potem cli.getUsage() mówi, że moje narzędzie ma opcję watch, której tak naprawdę nie ma. I oczywiście to wymyka się spod kontroli, jeśli chcę przekazać więcej opcji do mokki.

Jaki jest najlepszy sposób "tell" argumentów wiersza polecenia, aby zignorować opcje w moim scenariuszu?

Odpowiedz

14

Należy przerwać swoje narzędzie do części podstawowej, które odbywają się w obiekcie konfiguracyjnym i owijki wiersza poleceń, który używa tej części rdzenia. Następnie wystarczy przetestować część rdzeniową.

Twoim celem powinno być przetestowanie głównej części, która jest częścią, którą napisałeś; i nie ćwiczyć/testować modułu command-line-args, który teoretycznie powinieneś ufać, ponieważ już udowodnił, że działa przez swojego autora.

5

Napisałbym kod punktu wejścia do Twojej aplikacji CLI, tak aby mógł jawnie przyjmować tablicę łańcuchów jako argumenty, używając tylko process.argv bezpośrednio jako domyślny. Następnie możesz przekazywać różne listy argumentów dla celów testowania jednostkowego, ale nadal robisz to, co właściwe, gdy jesteś uruchomiony. Pseudokod:

function cliMain(args) { 
    args = args || process.argv 
    // parse args here and proceed 
} 
0

Jaki jest najlepszy sposób "tell" argumentów wiersza polecenia, aby zignorować opcje w moim scenariuszu?

Ustawiając albo partial lub stopAtFirstUnknown flagi w opcjach commandLineArgs. Example usage in a mocha script here. Pełny dokument here.

Powiązane problemy