如何对使用命令行参数的工具进行unit testing

我正在使用mocha为使用命令行参数 npm模块的工具编写unit testing。 不幸的是,用于摩卡的选项是由我的工具中的命令行参数select的,如果这些选项不存在于我的工具中,它会忠实地抛出一个错误。 例如,如果我这样做…

mocha --watch 

…然后命令行参数抛出:

UNKNOWN_OPTION:未知选项: – 观看

我可以通过在我的工具中做这样的事情来解决这个问题。

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

…但是,然后cli.getUsage()说我的工具有一个cli.getUsage()选项。 当然,如果我想向摩卡传递更多的select,这就会失控。

什么是“告诉”命令行参数忽略我的scheme中的选项的最佳方法?

你应该把你的工具分解成一个核心部分,它接受一个configuration对象和一个使用这个核心部分的命令行包装器。 然后你只是unit testing的核心部分。

你的目标应该是testing核心部分,这是你写的部分。 而不是锻炼/testingcommand-line-args模块,理论上你应该相信它已经被certificate是由它的作者工作的。

我会将入口点代码写入CLI应用程序,以便它可以显式地将一个string数组作为参数,只是直接使用process.argv作为默认值。 然后你可以通过各种参数列表来进行unit testing,但是在生产环境中仍然是正确的。 伪代码:

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