Angular 15升级后移除test.ts等文件的操作是否合规?
你的操作完全符合Angular 15测试规范
首先明确:你最终采取的解决步骤完全贴合Angular 15及更高版本的测试架构设计,下面逐点解释原因:
1. 删除test.ts、test-acceptance.ts及相关TS配置引用
Angular 15开始,CLI大幅简化了测试环境的初始化逻辑,不再要求开发者手动维护test.ts这类入口文件——CLI会自动处理测试环境的初始化工作。你之前遇到的NG0205: Injector has already been destroyed错误,本质就是多测试入口重复初始化测试环境导致的状态冲突,删除这些自定义入口文件正好解决了这个核心问题。
2. 移除package.json中验收测试脚本的入口属性
当移除自定义测试入口后,Angular CLI会自动使用默认的测试配置流程,不需要在package.json的脚本中指定入口文件,这一步是配套的合理操作,避免了冗余配置引发的冲突。
3. 在app.component.spec.ts中添加测试环境初始化代码
你添加的beforeAll代码是针对多测试套件共享环境的正确补全:
TestBed.resetTestEnvironment()确保每次运行测试时,都会重置干净的测试环境,彻底避免跨测试用例的状态污染;- 设置
teardown: { destroyAfterEach: false }是兼容你原有测试逻辑的选择——如果你的测试不需要保留组件实例,也可以改为true,这完全取决于你的测试需求,两种配置都符合Angular规范。
补充Angular 15测试的关键细节
- 关于polyfills配置:你之前在
angular.json的test块中添加zone.ts、zone.js/testing(按需加src/polyfills.ts)是正确的,因为Angular 15不再自动注入这些测试必需的polyfill,必须手动配置。 - 关于验收测试的隔离:如果需要区分单元测试和验收测试,建议在
angular.json中新增独立的测试配置块(比如命名为acceptance),通过配置不同的测试文件匹配规则来隔离两类测试,比维护多个入口文件更清晰。 - 关于官方文档的缺失:Angular 15升级文档确实对这个变更提及较少,因为它属于CLI的隐性优化,核心逻辑是让开发者更少关注测试环境的底层配置,更专注于测试用例本身。
内容的提问来源于stack exchange,提问作者ng_dev
相关产品推荐
相关产品推荐

