Angular 15迁移后test.ts中context移除,如何保留单文件测试技术?
Angular 15 下保留“仅运行特定文件测试”方案的适配方法
可以沿用核心逻辑,但需要适配Angular 15的测试架构调整——Angular 15移除test.ts中的context是因为改用了基于ES模块的测试入口,但指定特定文件运行测试的需求完全可以通过以下方式实现:
直接用Angular CLI原生参数:这是最简单的替代方案,不需要修改任何代码或脚本。运行测试时通过
--include参数指定单个或批量文件:# 单个文件 ng test --include="src/app/components/xxx.component.spec.ts" # 匹配多个文件 ng test --include="src/app/**/*my-component*.spec.ts"保留自定义脚本的适配方式:如果你的自定义脚本有复杂的文件筛选逻辑,不用强行恢复
context,可以通过以下方式改造:- 若用Karma:修改
karma.conf.js,通过环境变量接收目标文件路径,动态配置files字段; - 若用Jest:在自定义脚本中直接调用
jest命令并传入文件路径,或修改jest.config.js的testMatch配置,根据环境变量动态调整测试文件匹配规则。
- 若用Karma:修改
自定义测试入口的动态导入:如果需要在
test.ts中保留动态加载逻辑,可以替代原来的context写法,通过读取环境变量或命令行参数来动态导入指定测试文件:import 'zone.js/testing'; import { getTestBed } from '@angular/core/testing'; import { BrowserDynamicTestingModule, platformBrowserDynamicTesting } from '@angular/platform-browser-dynamic/testing'; getTestBed().initTestEnvironment( BrowserDynamicTestingModule, platformBrowserDynamicTesting(), ); // 读取环境变量中的测试文件列表,动态导入 const targetTestFiles = process.env.TARGET_TEST_FILES?.split(',') || []; targetTestFiles.forEach(file => import(`../${file}`));然后在自定义脚本中设置
TARGET_TEST_FILES环境变量后再执行ng test即可。
内容的提问来源于stack exchange,提问作者digalok
相关产品推荐
相关产品推荐

