74

我知道这是一种不好的做法,但请耐心等待:

我正在使用 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"
]
4

13 回答 13

124

对于 Angular 9 >(版本 6 > 以下)

1)将片段复制到的根目录angular.json,(配置所有项目/全局的设置)。
2) 或将代码片段复制到特定项目的根目录 ( projects.your-project-name) 中angular.json(为特定项目配置设置)。

"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,(配置所有项目/全局的设置)。
2) 或将代码片段复制到特定项目的根目录 ( projects.your-project-name) 中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
  }
},

每种文件类型的所有可配置选项(原理图选项):

"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 Github 上的 Angular CLI 工作区文件 (angular.json)

schema.json 中的原理图选项

如何在 Angular CLI v6 中执行 X

于 2018-05-30T07:00:22.983 回答
29

如果您使用的是 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
    }
  },
于 2018-06-29T07:26:28.647 回答
24

您可以运行此命令来禁用特定类型文件的规范文件生成:

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
    }
  }
}
于 2017-02-05T08:31:36.517 回答
13

只是为了更新Sabir Rahman 的回答

在 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
    }
  }
于 2017-05-12T02:10:39.147 回答
11

你可以加--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)
于 2019-04-03T09:36:50.620 回答
11

对于 Angular 9+:

根据Angular/CLI 上的这个 GitHub 问题Angular.json,配置略有变化,导致以前的配置模式发生变化。

改编自@sacgrover 的评论以及我自己的评论:

老路

"@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"
}

附加参考 => CLI 生成命令的 Angular 文档

于 2020-02-10T18:54:14.320 回答
10

如果为 true,您可以添加--skipTests=true|false它不会生成任何spec.ts

例子 :ng g component componentName --skipTests=true

此行不会生成任何spec.ts文件

编辑:

注意:从 Angular 7 开始,此命令不起作用,即使 angular 官方网站上提到了此命令。这里:https ://angular.io/cli/generate#component

于 2019-02-15T09:44:20.980 回答
9

对于角度 8+:

不推荐使用选项“spec”:改用“skipTests”,因此如果要创建新组件,请使用:

ng g c my-new-component --skipTests=true
于 2020-01-21T10:55:30.980 回答
4
"@schematics/angular:component": {"style": "scss","skipTests": true}

只需添加"skipTests":true到您的angular.json文件中即可解决问题

于 2021-10-22T16:54:05.683 回答
3

您可以在创建应用程序时尝试--skip-tests如下。

ng new yourProjectName --skip-tests

于 2020-01-13T07:28:56.867 回答
1

在 Angular.json 上添加以下代码

"schematics": {
    "@schematics/angular": {
      "component": {
        "spec": false
      }
    }
  }
于 2020-01-10T10:49:49.727 回答
1

只需运行以下命令:ng config schematics.@schematics/angular.component.spec false

于 2020-08-12T18:56:39.377 回答
0

只要这样做,你应该没问题:

ng generate component newFile --skip-tests
于 2021-05-04T07:03:32.903 回答