Angular 9 + CLI (TypeScript) - 如何停止生成 .spec.ts 测试文件
Angular 9 + CLI (TypeScript) - How to stop generating .spec.ts test files
我知道这是一种不好的做法,但请耐心等待:
我正在使用 Angular-CLI,特别是 ng g
来生成我所有的 类。但是,我对任何 *.spec.ts
测试文件都不感兴趣。我知道有两个标志(--inline-template
、--inline-style
)来处理内联 CSS 和 HTML 而不是单独的文件,对于规范 --spec
标志是默认设置为 true。
所以对于每个 运行,是的,我可以 ng g c foo --it --is --spec=false
。
但是如何在全局范围内禁用测试文件的创建?是否有任何默认设置?
鲁莽地,我做了一些事情(没有用),比如:
ng set spec=false --global
我还尝试通过填充排除数组来配置我的 src/tsconfig.json
:
"exclude": [
"**/*.spec.ts"
]
您可以运行此命令来禁用特定类型文件的规范文件生成:
ng set defaults.spec.FILETYPE false
例如:
ng set defaults.spec.component false // Won't generate spec files for .component files
或者,您可以从 angular-cli.json 文件中禁用所有规范文件生成。
{
...
"defaults": {
"spec": {
"class": false,
"component": false,
"directive": false,
"module": false,
"pipe": false,
"service": false
}
}
}
刚刚更新:
在 CLI 的 1.0.2 版中,您必须将每种类型的规范文件设置为 false。示例如下:
"defaults": {
"styleExt": "scss",
"component": {
"spec": false
},
"service": {
"spec": false
},
"directive": {
"spec": false
},
"class": {
"spec": false // Set to false by default
},
"module": {
"spec": false // Set to false by default
},
"pipe": {
"spec": false
}
}
对于Angular9>(版本6>以下)
1) 将片段复制到 angular.json
的根目录,(将设置配置为所有 projects/globally)。
2) 或将代码片段复制到 angular.json
中特定项目 (projects.your-project-name
) 的根目录(为特定项目配置设置)。
"schematics": {
"@schematics/angular:component": {
"style": "scss",
"skipTests": true
},
"@schematics/angular:class": {
"skipTests": true
},
"@schematics/angular:directive": {
"skipTests": true
},
"@schematics/angular:pipe": {
"skipTests": true
},
"@schematics/angular:service": {
"skipTests": true
}
},
每种文件类型的所有可配置选项Schematic Options:
"schematics": {
"@schematics/angular:component": {
"changeDetection": "Default",
"entryComponent": false,
"export": false,
"flat": false,
"inlineStyle": false,
"inlineTemplate": false,
"module": "",
"prefix": "",
"selector": "",
"skipImport": false,
"spec": true,
"style": "css",
"viewEncapsulation": "Emulated",
"skipTests": "false"
},
"@schematics/angular:module": {
"commonModule": true,
"flat": false,
"module": "",
"routing": false,
"routingScope": "Child"
},
"@schematics/angular:service": {
"flat": true,
"skipTests": true
},
"@schematics/angular:pipe": {
"export": false,
"flat": true,
"module": "",
"skipImport": false,
"skipTests": true
},
"@schematics/angular:directive": {
"export": false,
"flat": true,
"module": "",
"prefix": "app",
"selector": "",
"skipImport": false,
"skipTests": true
},
"@schematics/angular:class": {
"skipTests": true
}
},
对于Angular 6 >
1) 将片段复制到 angular.json
的根目录,(将设置配置为所有 projects/globally)。
2) 或将代码片段复制到 angular.json
中特定项目 (projects.your-project-name
) 的根目录(为特定项目配置设置)。
"schematics": {
"@schematics/angular:component": {
"styleext": "scss",
"spec": false
},
"@schematics/angular:class": {
"spec": false
},
"@schematics/angular:directive": {
"spec": false
},
"@schematics/angular:guard": {
"spec": false
},
"@schematics/angular:module": {
"spec": false
},
"@schematics/angular:pipe": {
"spec": false
},
"@schematics/angular:service": {
"spec": false
}
},
每种文件类型的所有可配置选项 (Schematic Options):
"schematics": {
"@schematics/angular:component": {
"changeDetection": "Default",
"export": false,
"flat": false,
"inlineStyle": false,
"inlineTemplate": false,
"module": "",
"prefix": "",
"selector": "",
"skipImport": false,
"spec": true,
"styleext": "css",
"viewEncapsulation": "Emulated"
},
"@schematics/angular:module": {
"commonModule": true,
"flat": false,
"module": "",
"routing": false,
"routingScope": "Child",
"spec": true
},
"@schematics/angular:service": {
"flat": true,
"spec": true
},
"@schematics/angular:pipe": {
"export": false,
"flat": true,
"module": "",
"skipImport": false,
"spec": true
},
"@schematics/angular:directive": {
"export": false,
"flat": true,
"module": "",
"prefix": "app",
"selector": "",
"skipImport": false,
"spec": true
},
"@schematics/angular:class": {
"spec": true
}
},
Angular CLI 配置 Angular CLI
错误:
ng set defaults.spec.component false
命令导致错误:get/set have been deprecated in favor of the config command.
ng set
已更改为 ng config
。
使用Angular CLI(配置命令用法):
angular.json
中用于生成规范、内联模板、内联样式等的设置现在保留在 schematics.@schematics/angular.<file-type>.<setting>
中。
运行 ng config schematics.@schematics/angular.component.spec false
为组件配置规范。此命令在 angular.json
文件中添加原理图 属性 中的设置。
Angular CLI workspace file (angular.json) on Angular Github
如果您使用的是 v6 并且需要编辑您的 angular.json
您可以编辑项目的原理图。
"schematics": {
"@schematics/angular:component": {
"styleext": "scss",
"spec": false
},
"@schematics/angular:class": {
"spec": false
},
"@schematics/angular:directive": {
"spec": false
},
"@schematics/angular:guard": {
"spec": false
},
"@schematics/angular:module": {
"spec": false
},
"@schematics/angular:pipe": {
"spec": false
},
"@schematics/angular:service": {
"spec": false
}
},
你可以添加 --skipTests=true|false
如果 true 它不会生成任何 spec.ts
示例:ng g component componentName --skipTests=true
此行不会生成任何 spec.ts 文件
编辑:
注意:从 angular 7 开始,此命令不起作用,即使 angular 的官方网站上提到了此命令。
这里:https://angular.io/cli/generate#component
你可以添加--spec=false
例子
ng g c home --spec=false
日志将是
CREATE src/app/home/home.component.scss (0 bytes)
CREATE src/app/home/home.component.html (23 bytes)
CREATE src/app/home/home.component.ts (262 bytes)
UPDATE src/app/app.module.ts (467 bytes)
在Angular.json
上添加以下代码
"schematics": {
"@schematics/angular": {
"component": {
"spec": false
}
}
}
您可以尝试 --skip-tests
在创建您的应用程序时,如下所示。
ng new yourProjectName --skip-tests
对于 angular 8+:
选项 "spec" 已弃用:请改用 "skipTests",因此如果您想创建新组件,请使用:
ng g c my-new-component --skipTests=true
对于 Angular 9+:
Angular.json
配置略有变化,这导致以前的配置架构发生变化,根据此 GitHub issue on Angular/CLI。
改编自@sacgrover's comment along with my own:
老办法
"@schematics/angular:component": {
// true => DO generate spec files, false => DON'T generate them
"spec": true,
"styleext": "scss"
}
新方式:
"@schematics/angular:component": {
// true => DON'T generate spec files, false => DO generate them
"skipTests": true,
"style": "scss"
}
只需 运行 这个命令:ng config schematics.@schematics/angular.component.spec false
只要这样做,你应该没问题:
ng generate component newFile --skip-tests
"@schematics/angular:component": {"style": "scss","skipTests": true}
只需将 "skipTests":true
添加到您的 angular.json 文件即可解决问题
您可以添加 --skipTests=true
以停止生成规范文件
示例:
ng g s core/services/auth/auth-guard --skipTests=true
日志将是
CREATE src/app/core/services/auth/auth-guard.service.ts (138 bytes)
我知道这是一种不好的做法,但请耐心等待:
我正在使用 Angular-CLI,特别是 ng g
来生成我所有的 类。但是,我对任何 *.spec.ts
测试文件都不感兴趣。我知道有两个标志(--inline-template
、--inline-style
)来处理内联 CSS 和 HTML 而不是单独的文件,对于规范 --spec
标志是默认设置为 true。
所以对于每个 运行,是的,我可以 ng g c foo --it --is --spec=false
。
但是如何在全局范围内禁用测试文件的创建?是否有任何默认设置?
鲁莽地,我做了一些事情(没有用),比如:
ng set spec=false --global
我还尝试通过填充排除数组来配置我的 src/tsconfig.json
:
"exclude": [
"**/*.spec.ts"
]
您可以运行此命令来禁用特定类型文件的规范文件生成:
ng set defaults.spec.FILETYPE false
例如:
ng set defaults.spec.component false // Won't generate spec files for .component files
或者,您可以从 angular-cli.json 文件中禁用所有规范文件生成。
{
...
"defaults": {
"spec": {
"class": false,
"component": false,
"directive": false,
"module": false,
"pipe": false,
"service": false
}
}
}
刚刚更新
在 CLI 的 1.0.2 版中,您必须将每种类型的规范文件设置为 false。示例如下:
"defaults": {
"styleExt": "scss",
"component": {
"spec": false
},
"service": {
"spec": false
},
"directive": {
"spec": false
},
"class": {
"spec": false // Set to false by default
},
"module": {
"spec": false // Set to false by default
},
"pipe": {
"spec": false
}
}
对于Angular9>(版本6>以下)
1) 将片段复制到 angular.json
的根目录,(将设置配置为所有 projects/globally)。
2) 或将代码片段复制到 angular.json
中特定项目 (projects.your-project-name
) 的根目录(为特定项目配置设置)。
"schematics": {
"@schematics/angular:component": {
"style": "scss",
"skipTests": true
},
"@schematics/angular:class": {
"skipTests": true
},
"@schematics/angular:directive": {
"skipTests": true
},
"@schematics/angular:pipe": {
"skipTests": true
},
"@schematics/angular:service": {
"skipTests": true
}
},
每种文件类型的所有可配置选项Schematic Options:
"schematics": {
"@schematics/angular:component": {
"changeDetection": "Default",
"entryComponent": false,
"export": false,
"flat": false,
"inlineStyle": false,
"inlineTemplate": false,
"module": "",
"prefix": "",
"selector": "",
"skipImport": false,
"spec": true,
"style": "css",
"viewEncapsulation": "Emulated",
"skipTests": "false"
},
"@schematics/angular:module": {
"commonModule": true,
"flat": false,
"module": "",
"routing": false,
"routingScope": "Child"
},
"@schematics/angular:service": {
"flat": true,
"skipTests": true
},
"@schematics/angular:pipe": {
"export": false,
"flat": true,
"module": "",
"skipImport": false,
"skipTests": true
},
"@schematics/angular:directive": {
"export": false,
"flat": true,
"module": "",
"prefix": "app",
"selector": "",
"skipImport": false,
"skipTests": true
},
"@schematics/angular:class": {
"skipTests": true
}
},
对于Angular 6 >
1) 将片段复制到 angular.json
的根目录,(将设置配置为所有 projects/globally)。
2) 或将代码片段复制到 angular.json
中特定项目 (projects.your-project-name
) 的根目录(为特定项目配置设置)。
"schematics": {
"@schematics/angular:component": {
"styleext": "scss",
"spec": false
},
"@schematics/angular:class": {
"spec": false
},
"@schematics/angular:directive": {
"spec": false
},
"@schematics/angular:guard": {
"spec": false
},
"@schematics/angular:module": {
"spec": false
},
"@schematics/angular:pipe": {
"spec": false
},
"@schematics/angular:service": {
"spec": false
}
},
每种文件类型的所有可配置选项 (Schematic Options):
"schematics": {
"@schematics/angular:component": {
"changeDetection": "Default",
"export": false,
"flat": false,
"inlineStyle": false,
"inlineTemplate": false,
"module": "",
"prefix": "",
"selector": "",
"skipImport": false,
"spec": true,
"styleext": "css",
"viewEncapsulation": "Emulated"
},
"@schematics/angular:module": {
"commonModule": true,
"flat": false,
"module": "",
"routing": false,
"routingScope": "Child",
"spec": true
},
"@schematics/angular:service": {
"flat": true,
"spec": true
},
"@schematics/angular:pipe": {
"export": false,
"flat": true,
"module": "",
"skipImport": false,
"spec": true
},
"@schematics/angular:directive": {
"export": false,
"flat": true,
"module": "",
"prefix": "app",
"selector": "",
"skipImport": false,
"spec": true
},
"@schematics/angular:class": {
"spec": true
}
},
Angular CLI 配置 Angular CLI
错误:
ng set defaults.spec.component false
命令导致错误:get/set have been deprecated in favor of the config command.
ng set
已更改为 ng config
。
使用Angular CLI(配置命令用法):
angular.json
中用于生成规范、内联模板、内联样式等的设置现在保留在 schematics.@schematics/angular.<file-type>.<setting>
中。
运行 ng config schematics.@schematics/angular.component.spec false
为组件配置规范。此命令在 angular.json
文件中添加原理图 属性 中的设置。
Angular CLI workspace file (angular.json) on Angular Github
如果您使用的是 v6 并且需要编辑您的 angular.json
您可以编辑项目的原理图。
"schematics": {
"@schematics/angular:component": {
"styleext": "scss",
"spec": false
},
"@schematics/angular:class": {
"spec": false
},
"@schematics/angular:directive": {
"spec": false
},
"@schematics/angular:guard": {
"spec": false
},
"@schematics/angular:module": {
"spec": false
},
"@schematics/angular:pipe": {
"spec": false
},
"@schematics/angular:service": {
"spec": false
}
},
你可以添加 --skipTests=true|false
如果 true 它不会生成任何 spec.ts
示例:ng g component componentName --skipTests=true
此行不会生成任何 spec.ts 文件
编辑:
注意:从 angular 7 开始,此命令不起作用,即使 angular 的官方网站上提到了此命令。 这里:https://angular.io/cli/generate#component
你可以添加--spec=false
例子
ng g c home --spec=false
日志将是
CREATE src/app/home/home.component.scss (0 bytes)
CREATE src/app/home/home.component.html (23 bytes)
CREATE src/app/home/home.component.ts (262 bytes)
UPDATE src/app/app.module.ts (467 bytes)
在Angular.json
上添加以下代码"schematics": {
"@schematics/angular": {
"component": {
"spec": false
}
}
}
您可以尝试 --skip-tests
在创建您的应用程序时,如下所示。
ng new yourProjectName --skip-tests
对于 angular 8+:
选项 "spec" 已弃用:请改用 "skipTests",因此如果您想创建新组件,请使用:
ng g c my-new-component --skipTests=true
对于 Angular 9+:
Angular.json
配置略有变化,这导致以前的配置架构发生变化,根据此 GitHub issue on Angular/CLI。
改编自@sacgrover's comment along with my own:
老办法
"@schematics/angular:component": {
// true => DO generate spec files, false => DON'T generate them
"spec": true,
"styleext": "scss"
}
新方式:
"@schematics/angular:component": {
// true => DON'T generate spec files, false => DO generate them
"skipTests": true,
"style": "scss"
}
只需 运行 这个命令:ng config schematics.@schematics/angular.component.spec false
只要这样做,你应该没问题:
ng generate component newFile --skip-tests
"@schematics/angular:component": {"style": "scss","skipTests": true}
只需将 "skipTests":true
添加到您的 angular.json 文件即可解决问题
您可以添加 --skipTests=true
以停止生成规范文件
示例:
ng g s core/services/auth/auth-guard --skipTests=true
日志将是
CREATE src/app/core/services/auth/auth-guard.service.ts (138 bytes)