node.js - 不显眼的 Node 测试

标签 node.js tdd bdd mocha.js

所以,我是 js 测试的新手,我正在尝试使用 mocha 来测试 Node 应用程序。

理想情况下,我希望拥有它,以便测试位于单独的文件中并在 Node 脚本本身上运行(可能通过在测试脚本顶部使用 require 调用)。目前我正在做一些我知道不正确的事情,即将测试包含在脚本文件底部的一个 block 中。这是生产代码中包含的测试代码的问题,以及当您尝试启动 Node 服务器时返回“描述未定义”的事实。

我已经阅读了很多关于 mocha 等的教程,您似乎可以通过执行“module.export.”来单独导出所有方法,但这似乎很昂贵而且也很突兀。

我在这里错过了什么?当然,您不必构建两个脚本(一个有测试代码,一个没有测试代码?)——那样会导致版本问题。

如何最好地做到这一点(文章链接也很感激地被接受。:)

谢谢

詹姆斯

最佳答案

下面是我看到人们在做的事情,以及我在自己的工作中采用的方法:

  1. 在您的模块中,只导出需要导出的值。就我个人而言,我尽量限制自己只导出一个函数,但那是一个单独的讨论。
  2. 创建一个test 目录并将所有测试用例放入其中。使用您喜欢的任何命名约定。我更喜欢为每个源模块准备一个测试文件。在每个文件的开头,简单地要求被测模块。
  3. 使用 --recursive 参数从 Makefile/Cakefile 调用 mocha,以便它知道检查 test 目录的全部内容。

这意味着您正在通过它们的接口(interface)测试模块,就像您在普通代码中使用它们一样。缺点是,如果您的非导出函数的执行路径很难通过模块的接口(interface)访问,您可能会发现自己有点沮丧。

一方面,我同意模块应该在使用时进行测试的观点。另一方面,我认为如果知道我直接测试了上述每一个棘手的执行路径,我晚上会睡得更好。在进行 node.js 编程之前,我花了几年时间编写 erlang 代码,它具有完全相反的约定:(测试放在源文件的末尾,因此它们可以直接访问模块中的每个函数,并测试包含/导出由 ifdef 指令处理)。就个人而言,我更喜欢 erlang 方法。

无论如何,我希望这对您有所帮助。如果任何读到这篇文章的人有强烈的相反意见,我很乐意听到。

关于node.js - 不显眼的 Node 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13078848/

相关文章:

javascript - 你能结合socket.io的emit功能吗?

database - 在哪些情况下,您会针对内存数据库而不是开发数据库进行测试?

java - 来自 Kent Beck 的 TDD 的 Money Example by example

java - 始终等待页面加载到 PageObjects 上

javascript - 如何在nodejs中比较两个字符串源和目标与全名

node.js - 如何在运行浏览器脚本之前设置 process.env?

javascript - 如何在不启动任何 Jasmine 测试的情况下运行 Karma 服务器

java - Cucumber Java TestNG 的片段看起来很奇怪

ruby-on-rails - 在 Rails 中设置 rspec 和 cucumber 之间的界限

node.js - 子模块中的 Angular 6 routerlink 和父模块中的 router-outlet (app.component)