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

Node.JS:测试代码与生产代码组织,node.js,unit-testing,Node.js,Unit Testing,粗略查看Github上的几个node.js项目,我注意到常见的惯例是将测试文件放在/spec目录下(确切名称可能有所不同:/tests,/specs,等等)。让我们称之为“经典”项目组织 另一方面,还有(至少在理论上)本地化组织:每个测试文件与它测试的生产文件位于同一目录中(例如,在/controllers下,我们将有login\u controller.js以及login\u controller.spec.js) 为了避免在这个明显主观的话题上发生神学之争,我将提出具体的问题: 有人看到过

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

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

为了避免在这个明显主观的话题上发生神学之争,我将提出具体的问题:

  • 有人看到过使用本地化组织的主要模块/应用程序吗
  • 本地化组织是否存在严重缺陷/限制?我所说的“硬”是指“Heroku在其部署包(也称为slug)中不包含specs/目录,因此传统组织在服务器上的占地面积较小”
  • 是否有测试框架(Mocha、jasmine node和co.)以某种方式强加了“经典”方案
  • 不,但这取决于您的组织偏好。我个人更喜欢一个测试目录
  • 没有。Heroku包含它接收到的slug中的所有内容,唯一被排除的是在.gitignore文件中从git中排除的内容
  • 不是100%确定,但通常不是,测试框架不会将结构强加给代码。它们只是为您提供了使用所需结构编写测试的工具

  • 这里的一致性比你决定的方向更重要。在源文件旁边的测试文件中,我看到了一些相对较小的问题

  • 潜在的代码导航问题。我有时能看到你打开门 关于事故的错误档案。当您想要打开测试文件时打开它 打开源文件等。如果 文件是并排的,唯一的区别是 文件名

  • 单元测试运行程序的潜在问题。大多数单元测试运行者似乎 默认情况下首选测试文件夹。我相信您可以配置 他们需要查看整个项目,但这取决于测试 跑步者

  • 可能较慢的单元测试自动化。因为您的测试文件是 在您的整个项目中,测试运行人员必须扫描 您的整个项目将用于测试文件,而不是专用目录。 对于大型代码库,这可能意味着您的测试需要更长的时间 要完成的套件。很可能,速度上的差异是相当大的 但规模很小

  • 正如我所说,这些都是小问题,你肯定可以解决它们,但这确实会增加一些摩擦。您必须权衡潜在的不利因素,以及将测试文件放在源文件旁边的好处