如何在IntelliJ IDEA中为*.spec.ts文件配置不同的tslint.json
针对Angular Spec文件配置宽松TSLint规则的解决方案
我完全懂你遇到的痛点——想给Angular项目的spec文件用更宽松的TSLint规则(比如优化expect语句的换行格式),但IntelliJ不支持Angular CLI那样的多TSLint配置映射,又不想破坏Angular推荐的文件结构。这里有几个完美适配你需求的方案:
方案1:使用TSLint的overrides字段(推荐)
从TSLint 5.12版本开始,官方支持在根tslint.json中通过overrides字段针对特定文件路径覆盖规则。这个方法不需要拆分配置文件,也不用调整项目结构,而且所有IDE和Angular CLI都能识别,完美适配非IntelliJ用户。
具体配置示例如下:
{ "extends": "tslint:recommended", "linterOptions": { "exclude": ["node_modules/**/*"] }, // 全局生效的基础规则 "rules": { "newline-per-chained-call": true, "no-unused-variable": true, // 其他你的项目规则... }, // 针对spec文件的规则覆盖 "overrides": [ { "files": ["**/*.spec.ts"], "rules": { // 禁用链式调用强制换行,优化expect语句格式 "newline-per-chained-call": false, // 可以添加其他宽松规则,比如允许测试中的未使用表达式 "no-unused-expression": false, // 按需添加更多spec专属规则... } } ] }
这个配置会让所有.spec.ts文件自动应用宽松规则,而源文件保持原有严格规则。IntelliJ 2018.1+版本完全支持这种配置方式,实时检查会自动识别并应用对应规则。
方案2:针对单个spec文件局部禁用规则(备选)
如果你只是偶尔需要调整某个文件的规则,可以在spec文件顶部添加TSLint注释,局部禁用特定规则:
// tslint:disable:newline-per-chained-call import { TestBed } from '@angular/core/testing'; import { MyService } from './my.service'; describe('MyService', () => { // ...你的测试代码 });
不过这个方法需要逐个文件添加注释,适合小范围调整,不如overrides字段高效。
为什么不推荐拆分目录?
正如你提到的,把测试文件单独放在一个目录并配置独立TSLint文件确实不符合Angular的推荐规范——Angular提倡将spec文件和对应的源文件放在同一目录,方便维护和查找,所以这个方案确实不建议采用。
内容的提问来源于stack exchange,提问作者szymonb
相关产品推荐
相关产品推荐

