Wofür werden die von Angular CLi generierten "spec.ts" -Dateien erstellt?

210

Ich bin neu in Angular 2 (und Angular im Allgemeinen ...) und finde es sehr ansprechend. Ich verwende Angular CLi , um Projekte zu generieren und zu bedienen. Es scheint gut zu funktionieren - obwohl es für meine kleinen Lernprojekte mehr produziert, als ich brauche -, aber das ist zu erwarten.

Ich habe festgestellt, dass es spec.tsfür jedes Winkelelement in einem Projekt (Komponente, Service, Rohr usw.) generiert wird . Ich habe mich umgesehen, aber keine Erklärung gefunden, wofür diese Dateien bestimmt sind.

Sind dies Build-Dateien, die normalerweise bei der Verwendung ausgeblendet werden tsc? Ich fragte mich, weil ich den Namen eines schlecht benannten Namens ändern wollte, den Componentich erstellt hatte, und entdeckte, dass der Name auch in diesen spec.tsDateien referenziert wurde .


import {
  beforeEach,
  beforeEachProviders,
  describe,
  expect,
  it,
  inject,
} from '@angular/core/testing';
import { ComponentFixture, TestComponentBuilder } from '@angular/compiler/testing';
import { Component } from '@angular/core';
import { By } from '@angular/platform-browser';
import { PovLevelComponent } from './pov-level.component';

describe('Component: PovLevel', () => {
  let builder: TestComponentBuilder;

  beforeEachProviders(() => [PovLevelComponent]);
  beforeEach(inject([TestComponentBuilder], function (tcb: TestComponentBuilder) {
    builder = tcb;
  }));

  it('should inject the component', inject([PovLevelComponent],
      (component: PovLevelComponent) => {
    expect(component).toBeTruthy();
  }));

  it('should create the component', inject([], () => {
    return builder.createAsync(PovLevelComponentTestController)
      .then((fixture: ComponentFixture<any>) => {
        let query = fixture.debugElement.query(By.directive(PovLevelComponent));
        expect(query).toBeTruthy();
        expect(query.componentInstance).toBeTruthy();
      });
  }));
});

@Component({
  selector: 'test',
  template: `
    <app-pov-level></app-pov-level>
  `,
  directives: [PovLevelComponent]
})
class PovLevelComponentTestController {
}
Frühling
quelle

Antworten:

265

Die Spezifikationsdateien sind Komponententests für Ihre Quelldateien. Die Konvention für Angular-Anwendungen besteht darin, für jede .ts-Datei eine .spec.ts-Datei zu haben. Sie werden mit dem Jasmine-Javascript-Testframework über den Karma-Testläufer ( https://karma-runner.github.io/ ) ausgeführt, wenn Sie den ng testBefehl verwenden.

Sie können dies für eine weitere Lektüre verwenden:

https://angular.io/guide/testing

ein weiser Mann
quelle
17
Danke, ich habe mich das selbst gefragt. Angenommen, ich möchte keine Tests ausführen. Kann ich die .spec-Dateien sicher löschen? (und auch die Testordner und Dateien wie der e2e-Ordner?)
Kokodoko
7
Ich habe auch das Gefühl, dass diese Frage etwas mehr Antworten erfordert. Können wir diese Dateien einfach völlig ignorieren und einfach unserer Arbeit nachgehen?
Mateusz Migała
18
Wie awiseman feststellt, dienen die Spezifikationsdateien tatsächlich zum Testen Ihrer Anwendung. Wenn Sie die Testdateien nicht verwenden möchten, können Sie sie einfach löschen oder ignorieren. Ihr Projekt funktioniert weiterhin ohne die Spezifikationsdateien.
Dennismuijs
33
Wenn Sie eine neue Komponente mit CLI generieren, können Sie diese hinzufügen --spec=false, um die Generierung einer Spezifikationsdatei auszuschließen. Der vollständige Befehl zum Generieren einer neuen Komponente lautet : ng g component comp-name --spec=false. Weitere Infos hier: github.com/angular/angular-cli/wiki/generate-component
Dean
11
Dies kann durch Ändern angular-cli.jsonwie { "defaults": { "component": { "spec": false } } }
folgt
20

Wenn Sie mit "ng new" ein neues Winkelprojekt generieren, können Sie das Generieren von spec.ts-Dateien überspringen. Dazu sollten Sie die Option --skip-tests anwenden.

ng neuer ng-app-name - überspringen-tests

Trueboroda
quelle
1
Können Sie diese Option festlegen, nachdem das Projekt generiert wurde?
HughHughTeotl
2

Die .spec.ts-Dateien sind für Komponententests für einzelne Komponenten vorgesehen. Sie können den Karma-Task-Runner durchlaufen lassen ng test. Um die Codeabdeckung von Unit-Testfällen für bestimmte Komponenten anzuzeigen, wird ausgeführtng test --code-coverage

Pritam Sinha
quelle
0

.spec.tsDatei wird für unit testingIhre Anwendung verwendet.

Wenn Sie es nicht generieren möchten, verwenden Sie es einfach --spec=falsebeim Erstellen eines neuen Component. So was

ng generate component --spec=false mycomponentName
Arvind Chourasiya
quelle