Angular 9 + CLI (TypeScript) - How to stop generating .spec.ts test files

AngularTypescriptAngular CliAngular2 Cli

Angular Problem Overview


I know it's kind of a bad practice, but bear with me:

I'm using Angular-CLI, particularly ng g to generate all of my classes. However, I'm not interested in any *.spec.ts test files. I know that there are two flags (--inline-template, --inline-style) to handle inline CSS and HTML instead of separated files, and for spec the --spec flag is set to true by default.

So for each run, yes, I could do ng g c foo --it --is --spec=false.

But how do I disable the creation of test files globally? Is there any default setting for it?

Rashly, I did some stuff (that didn't work), like:

ng set spec=false --global

I also tried configuring my src/tsconfig.json by filling the exclude array:

"exclude": [
    "**/*.spec.ts"
]

Angular Solutions


Solution 1 - Angular

For Angular 9 > (version 6 > below)

1) Copy snippet to the root of angular.json, (configures settings to all projects/globally).
2) Or copy snippet to the root of a specific project (projects.your-project-name) in angular.json (configures settings for a specific project).

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

All configurable options per type of file 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
  }
},

For Angular 6 >

1) Copy snippet to the root of angular.json, (configures settings to all projects/globally).
2) Or copy snippet to the root of a specific project (projects.your-project-name) in angular.json (configures settings for a specific project).

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

All configurable options per type of file (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 configuration with Angular CLI

ERROR:

The ng set defaults.spec.component false command results in the error: get/set have been deprecated in favor of the config command.

ng set got changed to ng config.

Using the Angular CLI (config command usage):

The settings for generating specs, inline templates, inline styling etc. within angular.json are now persisted inside the schematics.@schematics/angular.<file-type>.<setting>.

Run ng config schematics.@schematics/angular.component.spec false to configure spec for components. This command adds the setting inside the schematics property within the angular.json file.


Angular CLI workspace file (angular.json) on Angular Github

Schematic options inside schema.json

How to do X in Angular CLI v6

Solution 2 - Angular

If you're using v6 and need to edit your angular.json

You can edit the schematics for your project.

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

Solution 3 - Angular

You can run this command to disable spec file generation for a specific type of file:

ng set defaults.spec.FILETYPE false

For example:

ng set defaults.spec.component false // Won't generate spec files for .component files

Alternately you can just disable all spec file generation from the angular-cli.json file.

{
  ...
  "defaults": {
    "spec": {
      "class": false,
      "component": false,
      "directive": false,
      "module": false,
      "pipe": false,
      "service": false
    }
  }
}

Solution 4 - Angular

Just to update Sabbir Rahman's answer:

In version 1.0.2 of the CLI you will have to set the spec file to false for each individual type. An example is included below:

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

Solution 5 - Angular

you can add --skipTests=true|false if true it wont generate any spec.ts

example : ng g component componentName --skipTests=true

this line wont generate any spec.ts files

EDIT:

Note: As of angular 7 this command doesn't work, even though this command is mentioned on the official website of angular. Here: https://angular.io/cli/generate#component

Solution 6 - Angular

For Angular 9+:

The Angular.json config has changed slightly which is causing previous configuration schemas to change, per this GitHub issue on Angular/CLI.

Adapted from @sacgrover's comment along with my own:

Old way

"@schematics/angular:component": {
    // true => DO generate spec files, false => DON'T generate them
    "spec": true,
    "styleext": "scss"
}

New way:

"@schematics/angular:component": {
    // true => DON'T generate spec files, false => DO generate them
    "skipTests": true,
    "style": "scss"
}

Additional Reference => Angular Docs for CLI Generate Command

Solution 7 - Angular

you can add --spec=false

example

ng g c home --spec=false

log will be

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)

Solution 8 - Angular

For angular 8+:

Option "spec" is deprecated: Use "skipTests" instead, so if you want to create a new component use:

ng g c my-new-component --skipTests=true

Solution 9 - Angular

"@schematics/angular:component": {"style": "scss","skipTests": true}

Just add "skipTests":true to your angular.json file and you'll solve the problem

Solution 10 - Angular

you can try --skip-tests when you creating your app like below.

ng new yourProjectName --skip-tests

Solution 11 - Angular

Add Following code on Angular.json

"schematics": {
    "@schematics/angular": {
      "component": {
        "spec": false
      }
    }
  }

Solution 12 - Angular

Just Run this command: ng config schematics.@schematics/angular.component.spec false

Solution 13 - Angular

Just do this and you should be fine:

ng generate component newFile --skip-tests

Solution 14 - Angular

you can add --skipTests=true to stop generating spec file

Example:

ng g s core/services/auth/auth-guard --skipTests=true

log will be

CREATE src/app/core/services/auth/auth-guard.service.ts (138 bytes)

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionMo KawsaraView Question on Stackoverflow
Solution 1 - AngularBrampageView Answer on Stackoverflow
Solution 2 - AngularPaul StoryView Answer on Stackoverflow
Solution 3 - AngularSabbir RahmanView Answer on Stackoverflow
Solution 4 - AngularMark ValenziaView Answer on Stackoverflow
Solution 5 - AngularSai SundeepView Answer on Stackoverflow
Solution 6 - AngularKurtis JungersenView Answer on Stackoverflow
Solution 7 - AngularTRD-WarrenView Answer on Stackoverflow
Solution 8 - AngularGieView Answer on Stackoverflow
Solution 9 - AngularDaniel MendesView Answer on Stackoverflow
Solution 10 - AngularDushanView Answer on Stackoverflow
Solution 11 - AngularManish VadherView Answer on Stackoverflow
Solution 12 - AngularHerquiloide HeleView Answer on Stackoverflow
Solution 13 - AngularAnkit PandeyView Answer on Stackoverflow
Solution 14 - AngularBhavesh AjaniView Answer on Stackoverflow