2015-11-23 18 views
9

Sto utilizzando la moka per scrivere test di unità per uno strumento che utilizza il modulo n. command-line-args. Sfortunatamente, le opzioni pensate per la moka vengono rilevate da argomenti della riga di comando nel mio strumento, che genera doverosamente un errore se queste opzioni non esistono nel mio strumento. Ad esempio, se faccio questo ...Come testare uno strumento che utilizza la riga di comando-args

mocha --watch 

... poi della riga di comando-args lanci questo:

UNKNOWN_OPTION: Opzione sconosciuta: --watch

I può aggirare il problema facendo qualcosa di simile nel mio strumento ...

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

... ma poi cli.getUsage() dice che il mio strumento ha un'opzione watch che in realtà non ha. E ovviamente questo mi sfugge di mano se voglio passare più opzioni a moka.

Qual è il modo migliore per "dire" agli argomenti della riga di comando di ignorare le opzioni nel mio scenario?

risposta

14

Si dovrebbe rompere il vostro strumento in una parte di base che prende in un oggetto di configurazione e un involucro a riga di comando che utilizza tale parte di nucleo. Quindi ti basta testare la parte centrale.

Il tuo obiettivo dovrebbe essere davvero quello di testare la parte principale, che è la parte che hai scritto; e non per esercitare/testare il modulo command-line-args, che in teoria dovresti aver fiducia come già provato dal suo autore.

5

Scriverò il codice del punto di accesso nell'app CLI in modo che possa prendere esplicitamente un array di stringhe come argomenti, utilizzando solo process.argv direttamente come predefinito. Quindi è possibile passare in vari elenchi di argomenti per scopi di test unitari, ma fare sempre la cosa giusta quando si esegue in produzione. Pseudocodice:

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

Qual è il modo migliore per "dire" agli argomenti della riga di comando di ignorare le opzioni nel mio scenario?

impostando uno dei partial o stopAtFirstUnknown bandiere nelle commandLineArgs opzioni. Example usage in a mocha script here. Documenti completi here.