JavaScript 测试文件的约定是什么?

What is the convention for JavaScript test files?

我看到了一些名为 *.test.js*-test.js*.spec.js 等的文件

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

这取决于框架,尽管大多数框架允许您定义 glob 模式以确定哪些文件应被视为测试文件,例如选项 testRegex in Jest. The default value for Jest will consider *.test.js and *.js files inside __tests__ directories to be test files. In Mocha, it's the grep option.

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

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

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

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

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

  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)

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

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

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

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

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

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