You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 17:56:25