当前位置: 首页 > 网络应用技术

如何测试node.js命令行工具的单元

时间:2023-03-08 16:26:29 网络应用技术

  个人博客:如何添加Node.js命令行工具|伍登斯通的博客

  自从我加入实习以来,我遇到的第一个更有趣的问题是:如何将单元测试添加到CLI?在此之前,节点不仅不知道如何实现CLI,而且还知道单位测试吗?需要在单个测试中添加基于OCLIF。这是一个非常简单易用的CLI开发框架。与指挥官。在历史延迟的类中具有悠久历史的指挥官。在预处理挂钩中构建的历史延迟,使开发人员能够专注于功能命令的开发。命令基类已经受益匪浅。但是,本文的探索过程与OCLIF框架有一定的关系,因此首先在此处解释。遇到了一些问题。本文将记录零探索的过程,并给我解决方案。

  由于官方文档建议您不得体验它。文档中给出的示例非常简单:

  此示例使用(NOCK,用于模拟HTTP请求的软件包)来模拟和发送HTTP请求,然后模拟标准输出,然后执行真实命令,最后获得断言。此处介绍的oclif/fancy检验基于在摩卡咖啡上。简而言之,可以使用Chai语法的链条调用单测试库,该库可以编写较少的设置/拆卸库。

  看到这样一个简单的例子,我不禁要问。主要模拟方法是直接代理HTTP请求。这是非常直观的,因为每个命令确实需要发送HTTP请求。但是,也可能是一条十八个山路,简要列出了一些问题:

  当然,这并不是什么。使用模拟输出非常方便。此外,请仔细查看每个仓库文档,并且可以发现它可以通过插入桩代理来支持模拟用户输入(STDIN)。例如,使用输入时,您可以写下:

  简而言之,它缺乏最重要的能力:功能或模块 - 级别模拟,而不是简单的代理HTTP请求。

  开玩笑是一个非常流行的测试框架,它提供了功能和模块级别的出色模拟功能,这正是我们所需要的。使用其代理功能和模块功能,您可以像这样模拟API的呼叫:

  上面的代码可以表示本模块中的两个函数,而无需修改其他功能。

  另一个问题是,如果您需要在班级中充当函数,例如,在以下类中:

  我们需要充当代理的是此功能,因此我们需要使用来“监视”此类的原型。例子:

  这是一个非常强大的功能。它在CLI工具的单个测试中具有更重要的作用,即“监视”。可以这样获得的输出结果:

  当您需要断言时,只需使用它。

  现在,我们已经了解了这两个框架的优势和缺点:

  采取这种命令的优势:

  我们可以使用这样的两个框架:

  在此代码中,我们不仅使用笑话仿真功能和模块的功能,还使用 @oclif/test简单处理输入和输出,结合了两个框架的优势,我们可以平稳编写一个测试。

  在探索过程中,我发现有关向节点开发的CLI添加单个测试的信息是如此差,以至于很遗憾。此外,我还走了很多弯路,包括由TS-JEST造成的TS-JEST项目本身TS版本的TS-JEST无法使用。使用各种奇怪的方法尝试直接以奇怪的方式调用API。在缺乏经验的过程中,在编写单个测试的过程中,我发现很难掌握模拟的粒径。例如,我内部使用5个函数的命令,我什至需要删除4个模拟,从而导致大多数代码被执行。这可能意味着订单 - 级别的单个测试应基于API的正确基础。,它反映的问题是我不知道该测量单个测试。也许我已经测试了细节实现的细节。此外,CLI几乎不可避免地会使用某些FS方法。当某些模拟方法时,我发现整个工具直接崩溃,仅导致一个大的功能。这可能是您在编码时需要注意的问题。更多地关注并直接断言CLI可能根本不是一个不错的选择,因为各种不正常的输出,无法更改?

  大卫·迪亚兹(DavidDíaz)|用开玩笑(martianwabbit.com)测试OCLIF应用程序

  带开玩笑的单元测试节点CLI应用程序|乔恩·肖特(Jon Short)|中等的

  原始:https://juejin.cn/post/7113206690895364104