Node.JS:测试代码与生产代码组织

时间:2014-02-20 07:09:59

标签: node.js unit-testing

从粗略看看Github上的几个node.js项目,我注意到常见的惯例是将测试文件放在./spec目录下(具体名称可能会有所不同:./tests,{{1}等等)。我们称之为“经典”项目组织。

另一方面,还有(至少在理论上)“本地化”组织:每个测试文件与它测试的生产文件位于同一目录中(例如,在./specs下我们将./controllers 1}}以及login_controller.js)。

为了避免在这个明显主观的话题上进行神学上的争斗,我会提出具体的问题:

  • 是否有人使用本地化组织查看了主要模块/应用程序?
  • 本地化组织是否存在严重缺陷/限制? “硬”我的意思是“好吧,Heroku不包括其部署包中的specs /目录(a.k.a slug),所以经典组织在服务器上的占用空间更小”。
  • 是否存在以某种方式强加“经典”方案的测试框架(Mocha,jasmine-node和co。)?

2 个答案:

答案 0 :(得分:2)

这里的一致性比你决定的方向更重要。我看到一些相对较小的问题与源文件旁边的测试文件一起使用。

  1. 潜在的代码导航问题。我有时会看到你打开 事故中的错误文件。打开测试文件的意思是 打开源文件等。如果这些文件会更频繁发生 文件是并排的,唯一的区别是.spec在 文件名。

  2. 单元测试跑步者的潜在问题。大多数单位测试跑步者似乎 默认情况下更喜欢测试文件夹。我相信你可以配置 他们看整个项目,但这取决于测试 转轮。

  3. 单位测试自动化速度可能较慢。因为您的测试文件是 在整个项目中混合,测试运行器必须扫描 整个项目用于测试文件而不是专用目录。 对于大型代码库,这可能意味着您的测试需要更长的时间 套房完成。机会是速度的差异是相当的 但是很小。

  4. 正如我所说,这些都是小问题,你绝对可以解决它们,但它确实增加了一些摩擦力。您必须权衡潜在的缺点与您认为将测试文件驻留在源文件旁边的好处。

答案 1 :(得分:1)

  1. 不,但这取决于您的组织偏好。我个人更喜欢测试目录。
  2. 不。 Heroku包含了它收到的slug中的所有内容,排除的唯一内容是你的.gitignore文件中的git中排除的内容。
  3. 不是100%肯定,但通常不会,测试框架不会在您的代码上强加一个结构。它们只是为您提供了使用您想要的结构编写测试的工具。