【问题标题】:How to unit test a tool that uses command-line-args如何对使用命令行参数的工具进行单元测试
【发布时间】:2016-02-25 23:36:21
【问题描述】:

我正在使用 mocha 为使用 command-line-args npm 模块的工具编写单元测试。不幸的是,我的工具中的命令行参数选择了用于 mocha 的选项,如果我的工具中不存在这些选项,它会尽职尽责地抛出错误。例如,如果我这样做......

mocha --watch

...然后命令行参数抛出这个:

UNKNOWN_OPTION:未知选项:--watch

我可以通过在我的工具中执行类似的操作来解决此问题...

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() 说我的工具有一个 watch 选项,它实际上没有。当然,如果我想将更多选项传递给 mocha,这就会失控。

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

【问题讨论】:

    标签: node.js mocha.js command-line-arguments


    【解决方案1】:

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

    通过在commandLineArgs 选项中设置partialstopAtFirstUnknown 标志。 Example usage in a mocha script here。完整文档here

    【讨论】:

      【解决方案2】:

      您应该将您的工具分解为一个核心部分,该部分包含一个配置对象和一个使用该核心部分的命令行包装器。然后你只需对核心部分进行单元测试。

      你的目标应该是测试核心部分,也就是你写的部分;而不是练习/测试command-line-args 模块,理论上你应该相信它已经被作者证明是有效的。

      【讨论】:

        【解决方案3】:

        我会将入口点代码写入您的 CLI 应用程序,以便它可以显式地将字符串数组作为参数,仅直接使用 process.argv 作为默认值。然后,您可以传递各种参数列表以进行单元测试,但在生产中运行时仍然可以做正确的事情。伪代码:

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

        【讨论】:

          猜你喜欢
          • 2011-08-22
          • 1970-01-01
          • 2016-11-07
          • 1970-01-01
          • 1970-01-01
          • 2016-09-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多