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。
使用了几个测试框架后,感觉下面的比较好:
对于测试文件名,使用如下:
/test/*.test.js
- 首选,无需解释。
/test/*.spec.js
- 好的,但新加入的人总是问我 - 为什么?。这里的spec
表示需求说明。
/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 分享。
我看到了一些名为 *.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。
使用了几个测试框架后,感觉下面的比较好:
对于测试文件名,使用如下:
/test/*.test.js
- 首选,无需解释。/test/*.spec.js
- 好的,但新加入的人总是问我 - 为什么?。这里的spec
表示需求说明。/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 分享。