Angular 16升级至19后ng test检测到非测试文件错误但ng build无报错的问题排查咨询
这种跨版本升级后出现的环境差异问题确实挺闹心的,我之前升级Angular大版本的时候也遇到过类似的情况,给你几个具体的排查方向,你可以逐一试试:
检查测试与构建环境的TypeScript配置差异
Angular里ng test默认使用tsconfig.spec.json,而ng build(包括生产环境)依赖的是tsconfig.json或tsconfig.app.json。跨版本升级后,这几个配置文件的compilerOptions可能出现了规则不一致——比如测试环境开启了更严格的类型检查(像strictNullChecks、noImplicitAny这类),但主构建配置里没开,导致之前被“放过”的类型问题只在测试时暴露出来。你可以把这几个tsconfig文件的compilerOptions部分对比着看,重点查严格模式相关的配置项。核对Angular CLI测试与构建的处理逻辑差异
从Angular 16到19,CLI对测试环境的代码处理做了不少更新,比如测试时可能默认启用了额外的类型检查插件,或者强制开启了模板类型检查。你可以打开angular.json,找到test配置节点的options部分,看看tsConfig是否指向了正确的tsconfig.spec.json,有没有额外的typeCheck相关配置(比如typeCheck: true),而构建环境的配置里没有这个设置。排查第三方依赖的类型定义兼容性
升级Angular的同时,如果第三方依赖(特别是@types/*系列的类型包)没同步升级,很可能会和Angular 19对应的TypeScript版本(大概是5.3.x)不兼容。你可以打开package.json,检查所有dependencies和devDependencies里的包版本,看看有没有版本过低的@types/xxx,或者直接运行npm ls @types/*来查看依赖树里的冲突,必要时升级这些类型包到兼容TS 5.3的版本。清理缓存排除临时状态问题
IDE和Angular CLI的缓存有时候会“欺骗”我们——构建命令可能用了旧缓存跳过了某些检查,但测试命令会重新拉取最新配置。你可以先运行ng cache clean清空CLI缓存,然后重启IDE,再分别执行ng build --configuration production和ng test,看看IDE会不会现在也能检测到那些错误,或者确认是不是缓存导致的环境差异。检查模板类型检查的级别设置
Angular的模板类型检查有不同级别(basic、strict等),升级后测试环境可能默认把strictTemplates设为了true,但构建环境还是basic级别。你可以在tsconfig.spec.json和tsconfig.app.json的angularCompilerOptions里查看strictTemplates的配置,如果测试环境开了更严格的模板检查,组件模板里的类型问题(比如绑定的属性不存在、类型不匹配)就只会在测试时被检测出来。
如果能把ng test抛出的具体错误信息(比如“Property 'data' does not exist on type 'undefined'”这类)整理出来,会更有助于精准定位问题哦。
内容来源于stack exchange

