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

Schematic options inside schema.json

How to do X in Angular CLI v6

如果您使用的是 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"
}

其他参考 => Angular Docs for CLI Generate Command

只需 运行 这个命令: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)