Para que servem os arquivos “spec.ts” gerados pelo Angular CLi?

212

Eu sou novo no Angular 2 (e Angular em geral ...) e estou achando muito interessante. Estou usando o Angular CLi para gerar e atender projetos. Parece funcionar bem - embora para meus pequenos projetos de aprendizado produza mais do que eu preciso -, mas isso é de se esperar.

Percebi que ele gera spec.tspara cada elemento Angular em um projeto (Componente, Serviço, Pipe, etc). Eu procurei, mas não encontrei uma explicação para o que esses arquivos servem.

Esses arquivos de compilação estão normalmente ocultos ao usar tsc? Eu me perguntava porque queria mudar o nome de um nome mal Componentcriado que eu havia criado e descobri que o nome também era mencionado nesses spec.tsarquivos.


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

Respostas:

266

Os arquivos de especificação são testes de unidade para seus arquivos de origem. A convenção para aplicativos Angular é ter um arquivo .spec.ts para cada arquivo .ts. Eles são executados usando a estrutura de teste javascript do Jasmine através do executor de teste Karma ( https://karma-runner.github.io/ ) quando você usa o ng testcomando.

Você pode usar isso para algumas leituras adicionais:

https://angular.io/guide/testing

um homem sábio
fonte
17
Obrigado, eu estava me perguntando isso. Suponha que eu não queira executar nenhum teste. Posso excluir com segurança os arquivos .spec? (? e também as pastas de teste e arquivos, como a pasta E2E)
Kokodoko
7
Também sinto que esta pergunta requer um pouco mais de resposta. Podemos simplesmente ignorar totalmente esses arquivos e continuar nosso trabalho?
Mateusz Migała
18
Como afirma o awiseman, os arquivos de especificação são realmente para testar seu aplicativo. Se você não quiser usar os arquivos de teste, pode simplesmente excluí-los ou ignorá-los. Seu projeto continuará funcionando sem os arquivos de especificação.
21817 Dennismuijs # 1355
33
ao gerar um novo componente com a CLI, você pode adicionar --spec=falsepara excluir a geração de um arquivo de especificação. O comando completo para gerar um novo componente seria: ng g component comp-name --spec=false. Mais informações aqui: github.com/angular/angular-cli/wiki/generate-component
Dean
11
isso pode ser desativado modificando-se angular-cli.jsonassim:{ "defaults": { "component": { "spec": false } } }
Ali Sherafat 19/18
20

se você gerar um novo projeto angular usando "ng new", poderá pular a geração de arquivos spec.ts. Para isso, você deve aplicar a opção --skip-tests.

ng novo ng-app-name --skip-tests

trueboroda
fonte
1
Você pode definir esta opção após a geração do projeto?
HughHughTeotl 11/10/19
2

Os arquivos .spec.ts são para testes de unidade de componentes individuais. Você pode executar o corredor de tarefas do Karma ng test. Para ver a cobertura de código de casos de teste de unidade para componentes específicos, executeng test --code-coverage

Pritam Sinha
fonte
0

.spec.tsO arquivo é usado para o unit testingseu aplicativo.

Se você não conseguir gerá-lo, use --spec=falseenquanto cria um novo Component. Como isso

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