【问题标题】:What is the convention for JavaScript test files?JavaScript 测试文件的约定是什么?
【发布时间】:2018-04-03 14:35:21
【问题描述】:

我见过一些名为*.test.js*-test.js*.spec.js 等的文件。

是否有一个实际的约定如何命名 JavaScript 测试文件?还是这取决于我使用的框架?

【问题讨论】:

  • 究竟什么是“测试文件”?你的意思是像 npm 测试?不清楚你在问什么,但这听起来是基于意见的。
  • 没有约定。

标签: javascript unit-testing cypress


【解决方案1】:

使用了几个测试框架后,感觉下面的比较好:

对于测试文件名,使用如下:

  1. /test/*.test.js - 首选,无需解释。
  2. /test/*.spec.js - 好的,但是新加入的人总是问我 - 为什么? spec 在这里表示需求规范。
  3. /test/*.test.txt - 如果测试用例在文本文件中,则首选。一组行是一个测试用例(见下文)。

例如:

  • a.js 是应该测试的主要 JavaScript 文件
  • /test/a.test.js 是上面测试a.js 的测试文件。请注意,/test/ 是一个测试文件夹。

您可能会发现 *.test.txt 是新的,因此请添加更多详细信息。

一个测试用例的格式为三行,可以是*.test.txt中的如下格式:

  • inputParam1 - may be the first parameter of a critical function which needs many tests
  • inputParam2 - may be second parameter of a critical function which needs many tests
  • expected
  • inputParam1
  • inputParam2
  • expected
  • ...

所以,每三行构成一个测试用例。

您可以偶尔添加函数名称line,如下所示,测试不同的功能:

  • -func:someMethod1
  • ... (above input/expected lines)
  • -func:someMethod2
  • ... (above input/expected lines)

要执行函数名,或者为类创建新对象,可以使用eval(className)someMethod1[inputParam]等。虽然不推荐eval,但我使用它,因为它是测试框架而不是生产文件。如果这是一个问题,你会比 eval 更好的方法。

在使用了几个测试框架后,发现这个文本文件测试,对于一些特殊情况来说是最方便的。 (无需在JavaScript、JSON等中格式化)

如果需要,可以忽略以#、// 或所有空行开头的。

所以,我编写了自己的框架,以这种方式工作。

  • 如果您知道可以读取上述*.test.txt 格式的测试框架,请在下方发表评论。

  • 如果您需要我的代码,请联系我,将通过 GitHub 分享。

【讨论】:

    【解决方案2】:

    这取决于框架,尽管大多数框架允许您定义一个 glob 模式来确定哪些文件应该被视为测试文件,例如Jest 中的选项testRegex。 Jest 的默认值会将__tests__ 目录中的*.test.js*.js 文件视为测试文件。在Mocha 中,它是grep option

    【讨论】:

      【解决方案3】:

      我更喜欢 classServiceName.spec.ts。您的问题被标记为单元测试,所以我假设您正在测试一个单元。

      因此,如果我有一个名为 person.component.ts 的组件,我的测试将是 person.component.spec.ts 并且它将位于相同的文件夹结构中.如果我有 person.service.ts 那么测试将是 person.service.spec.ts 相同的文件夹结构。

      您的标签中还包含Cypress,因此这可能是一个集成测试。我会将其命名为我正在测试的页面或场景。很抱歉假设 Angular 和 TypeScript。

      【讨论】:

      • 同样的文件夹结构也可以通过.test.ts来实现,我不知道这个答案有什么好处?这种偏好似乎并没有增加实际的好处或合理的推理......可能需要修改答案
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-05
      • 1970-01-01
      • 2014-10-17
      • 2016-04-12
      • 2019-03-26
      • 1970-01-01
      相关资源
      最近更新 更多