测试文件应该放在与源文件相同的文件夹中吗?

Ugh*_*ent 23 javascript testing typescript karma-runner

是否更容易将测试文件放在他们测试的源文件旁边(在同一src目录中),还是应该tests创建一个具有镜像层次结构的单独目录?

将它们放在同一个文件夹中似乎可以使维护生活更轻松,但也会挤占源目录.

选项1:具有源和测试的单独文件夹时的目录结构:

- src
+-- item.ts
`-- util
    +-- helper.ts

- test
+-- item.test.ts
`-- util
    `-- helper.test.ts
Run Code Online (Sandbox Code Playgroud)

选项2:将两种类型的文件放在同一目录中时的目录结构:

- src
+-- item.ts
+-- item.test.ts
`-- util
    +-- helper.ts
    `-- helper.test.ts
Run Code Online (Sandbox Code Playgroud)

我曾经一直使用选项1,直到尝试angular-cli并在测试文件旁边生成代码文件,如选项2所示,这使我重新思考整个事情.

Ami*_*mid 14

我的个人建议是选择#1.原因是:

  1. 您的源代码不会受到与实际业务逻辑无关的代码的"污染".请注意,为同一个类/模块提供多个测试文件并不罕见.
  2. 还有更多只是你可能会写的单元测试.那e2e怎么样?它们是否会被放置在相应的"东西"旁边,因为它们不是特定文件的约束?因此,您最终可能会在整个项目中混乱您的测试 - 其中一些在一个地方,一些在另一个地方.在专用目录中分离所有测试 - 解决了这个问题.
  3. 它很容易准备项目的部署.否则你将不得不以某种方式从已转换的源中删除所有测试.

不要相信我 - 看看像这样的既定项目

  • 我不得不在这里不同意:即使是Angular 2项目本身就是这样设置的.测试不会"污染"您的代码.测试是你的代码.单个组件的单元测试很有用,而不是仅仅为了测试而保留主代码目录的镜像,您可以在那里找到您正在寻找的单元测试. (6认同)
  • 我们正在谈论不同的事情。我真的不希望以“一个”的方式进行交战,因此我的回答始于“我的个人推荐”。关于angular2-只需从其git存储库中提取第一个文件夹:https://github.com/angular/angular/tree/master/modules/%40angular/animation,我们可以清楚地将测试和源代码分离到两个不同的嵌套文件夹中。并且每个“模块”都相同。 (3认同)
  • 我的意见:我更喜欢#1,因为#2 让我的眼睛更努力地工作。对于#2,当我寻找要单击的组件文件时,规范文件会减慢我的速度。spec文件的名字是如此的相似,除非我放慢速度仔细阅读,否则我会点击spec文件名而不是组件文件名。这浪费我的时间。这很重要,因为我使用组件文件的次数比使用规范文件的次数要多。 (3认同)
  • 撇开个人偏好不谈,您的测试是业务逻辑的一部分(#1)。您可以将测试视为业务规则的定义,将生产代码视为它们的实现。当我第一次看一个项目时,我主要看测试,因为它们有时比代码本身更好地解释代码(假设它们写得很好)。对于 #2,您将 e2e 测试放在一个单独的文件夹中,就像现在一样。我看不出将两种哲学结合起来有什么问题?#3 在你的构建配置中添加 1 个额外的排除对我来说似乎不是很多工作:) (3认同)
  • 我认为这里只有 #2 是一个有效的参数,这可以通过在单独的目录中进行 e2e 测试来解决,而单元测试位于其文件旁边,从而显示哪些内容有测试,哪些没有测试,并使其成为可能当源文件(不可避免地)被移动或重命名时,更容易移动/重命名测试文件。 (2认同)
  • 这个答案比其他答案有更具体的理由。我希望它得到更高的支持。此外,这种方法使测试帮助程序代码远离源代码并最终远离捆绑的应用程序。例如,您最终可能会使用生成虚拟数据的方法来编写 testUtils.ts。您需要遵循命名约定以从构建中排除这些类型的文件,或者您可以简单地将其全部放入 /test/ 目录中并继续您的生活。 (2认同)

aar*_*ond 12

选项#2是我的方式.

在考虑Angular 2组件时,我认为它们是一个单独的实体,由多个文件组成.您不会将HTML/CSS文件移到远离组件的其他目录,那么为什么要移动单元测试?

我为VSCode编写了一个小实用程序插件,我个人认为它非常有用 - 它将Angular 2组件压缩到Explorer视图中的单个条目中,并添加图标/上下文菜单选项以进入模板/ css/unit测试.这有助于我将组件视为一个单元,包含多个部件.也许这样的东西可以帮助保持你的目录"干净",如果这是你担心的?

我鼓励您将单元测试视为代码的一部分,而不是除了.如果你能掌握它们,它们将非常有用.

  • 赞成_"将单元测试视为代码的一部分"_ (4认同)
  • “那么为什么要移动单元测试呢?” 因为与您提到的其他文件不同,它们不需要在 Web 浏览器中生成或呈现组件。这种细微差别很重要,也是我不同意这个答案的原因。 (3认同)
  • 我同意,过去几年我一直在使用选项#1,但它不能很好地扩展到大型代码库中。使用选项#1,您的测试文件夹层次结构必须镜像与 src 代码结构相同的结构。这对于小项目来说是可以的。但对于大型重构来说,保持镜像结构正确是非常困难的。使用选项#1,每当您移动源代码文件夹时,测试都会随之移动。效率更高。 (3认同)
  • 在这种情况下,这肯定只是偏好 (2认同)
  • 插件叫什么名字?我很想尝试。 (2认同)