在我们的项目中,为了减少运行测试的数量,并在开发过程中仅针对特定文件运行特定测试,我们使用我们自己的脚本和这种技术:
然而,在迁移到 Angular 15 之后,这个“上下文”内容已从 test.ts 文件中删除。
有没有办法在 Angular 15 中仍然使用相同的技术?
我试图将“上下文”返回到 test.ts 但没有成功。
test.ts文件不再由angular生成,用于链接文件的属性
main
在angular.json中不再允许,您可以使用angular.json中的include属性添加模式或文件名
"test": {
...
"options": {
"include": [
"**/app.component.spec.ts"
]
...
}
}
require.context
我刚刚遇到了同样的问题,将应用程序从 Angular 14 转换为 15,结果证明解决方案更简单:只需删除
src/test.ts
底部的两行。不再需要调用require.context()
。
我以前有
const context = require.context("./", true, /\.spec\.ts$/);
context.keys().forEach(context);
在
src/test.ts
的末尾,但现在我删除了这两行,我的测试都像以前使用 Angular 14 一样运行。
我找不到适合此更改的文档(这就是我首先提出这个问题的原因)但我的假设是 Karma 现在会自动找到所有
*.spec.ts
文件,我们不再需要指示它这样做。
"include"
在
"include"
/"test":
下添加的 "options":
属性仅在您想限制要运行的规范文件列表时才需要。
所以,根据我的测试,像这样配置
angular.json
:
"test": {
"options": {
"include": ["**/*.spec.ts"],
...
},
...
或没有
"include"
,所有规格文件都被执行。
但是像这样配置
angular.json
:
"test": {
"options": {
"include": ["**/app.component.spec.ts"],
...
},
...
只有规格文件调用
app.component.spec.ts
实际得到锻炼。
我不知道你为什么要限制执行哪些规范文件,但我认为值得在这里记录下来以了解发生了什么。
因为这些是茉莉花测试,在开发过程中运行特定测试的另一种方法是强制只运行那些测试:
describe(…)
更改为 fdescribe(…)
(和/或 it(…)
到 fit(…)
)以获取您正在处理的特定规格。只有这些会运行。fdescribe(…)
/fit(…)
变回describe(…)
/it(…)
。所有规格将再次运行。其他测试框架可能有类似的功能。
注意:同样,规格可以包含在xdescribe(…)
和
xit(…)
中。import { getTestBed } from '@angular/core/testing';
import { BrowserDynamicTestingModule, platformBrowserDynamicTesting } from '@angular/platform-browser-dynamic/testing';
// First, initialize the Angular testing environment.
getTestBed().initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting());
在我使用的angular.json中:
"main": "projects/mijn-svb/src/test.ts",
"polyfills": [
"zone.js",
"zone.js/testing"
],
"karmaConfig": "projects/mijn-svb/karma.conf.js",
不要忘记将 test.ts 添加到您的 tsconfig.spec.json
"files": [
"src/test.ts"
],