typescript - La ce folosesc fișierele „spec.ts” generate de Angular CLI?


Folosesc Angular CLI pentru a genera și servit proiecte. Se pare că funcționează bine - deși pentru proiectele mele mici de învățare, produce mai mult decât am nevoie - dar acest lucru era de așteptat.

Am observat că generează spec.ts pentru fiecare element Angular dintr-un proiect (Componentă, Serviciu, Pipe, etc). Am căutat în jur, dar nu am găsit o explicație despre la ce servesc aceste fișiere.

Sunt acestea fișiere de construire care sunt de obicei ascunse atunci când se folosește tsc? M-am întrebat pentru că doream să schimb numele unui Component prost numit pe care l-am creat și am descoperit că numele era de asemenea menționat în aceste fișiere spec.ts.


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

Răspuns #1

Fișierele spec sunt teste unitare pentru fișierele tale sursă. Convenția pentru aplicațiile Angular este să existe un fișier .spec.ts pentru fiecare fișier .ts. Acestea sunt rulate folosind cadrul de testare Jasmine pentru JavaScript prin intermediul runner-ului de teste Karma (https://karma-runner.github.io/) atunci când folosești comanda ng test.

Poți folosi acest lucru pentru a citi mai departe:

https://angular.io/guide/testing

Răspunsul #2

Dacă generezi un proiect Angular nou folosind „ng new”, poți sări peste generarea fișierelor spec.ts. Pentru aceasta, ar trebui să aplici opțiunea --skip-tests.

ng new ng-app-name --skip-tests