Node.JS:testing代码与生产代码组织

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

另一方面,(至less在理论上)“本地化”组织:每个testing文件都与它所testing的生产文件在同一目录中(例如,在./controllers下,我们将有login_controller.js以及login_controller.spec.js )。

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

  • 有没有人看到使用本地化组织的主要模块/应用程序?
  • 本地化组织有什么缺点/限制吗? 通过“硬”我的意思是沿着“好吧,Heroku不包括在其部署捆绑(又名slu spec)的规格/目录,所以经典组织在服务器上有一个较小的足迹”。
  • 有没有testing框架(摩卡,茉莉花节点和合作)以某种方式强加“经典”计划?

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

这里的一致性比你决定去的方向更重要。 有一些相对较小的问题,我看到与源文件旁边的testing文件。

  1. 潜在的代码导航问题。 我偶然可以看到你偶然打开错误的文件。 当打开源文件等时打开testing文件。如果这些文件并排存在,这种情况会更频繁,唯一的区别是文件名中的.spec。

  2. unit testing运行者可能遇到的问题。 大多数unit testing运行者似乎更喜欢默认的testing文件夹。 我相信你可以configuration它们来查看整个项目,但这取决于testing运行者。

  3. 潜在的较慢的unit testing自动化。 由于您的testing文件在整个项目中混合使用,testing运行器将不得不扫描整个项目的testing文件,而不是专用目录。 对于大型代码库,这可能意味着testing套件需要更长时间才能完成。 机会是速度的差异是相当小的然而。

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