Eu tenho o projeto Angular2 compilado com Angular-CLI (beta 20).
Existe uma maneira de executar testes em apenas um arquivo de especificação selecionado?
Eu costumava ter um projeto baseado no início rápido do Angular2 e podia adicionar manualmente especificações ao arquivo jasmim. Mas não sei como configurar isso fora dos testes de karma ou como limitar os testes de karma a arquivos específicos com builds de CLI angular.
fonte
fdescribe
ouxdescribe
? Não quero que um revisor desleixado mescle um PR que pule todos os meus testes.Configure o
test.ts
arquivo dentro dasrc
pasta:Substitua
/\.spec\.ts$/
pelo nome do arquivo que você deseja testar. Por exemplo:/app.component\.spec\.ts$/
Isso executará o teste apenas para
app.component.spec.ts
.fonte
Você pode testar apenas um arquivo específico com a CLI Angular (o
ng
comando) assim:Documentos adicionais estão em https://angular.io/cli/test
Observe que, embora funcione para arquivos de biblioteca independentes, não funcionará para componentes / serviços angulares / etc. Isso ocorre porque os arquivos angulares têm dependências de outros arquivos (principalmente
src/test.ts
no Angular 7). Infelizmente, a--main
bandeira não aceita vários argumentos.fonte
component.spec.ts
arquivo gerado automaticamente, veremos que os testes nunca começam:Error: AsyncTestZoneSpec is needed for the async() test helper but could not be found. Please make sure that your environment includes zone.js/dist/async-test.js
... Tenho certeza de que uma solução alternativa adicional pode ser hackeada, mas é algo a ter em atenção porque a configuração feita dentrosrc/main.ts
e suas importações não está disponível neste caso.ng t
o teste que estou escrevendo passa, mas quando executo o arquivo específico, ocorre um erro. TypeError: Não é possível ler a propriedade 'getComponentFromError' de null em TestBedViewEngine._initIfNeeded (node_modules/@angular/core/fesm2015/testing.js: 3112: 1) em TestBedViewEngine.get (node_modules/@angular/core/fesm2015/testing.js: 3230: 1) em Function.get (node_modules/@angular/core/fesm2015/testing.js: 2960: 1) no UserContext. <anônimo> (src / app / timebar.service.spec.ts: 14: 45) "Se você deseja controlar quais arquivos são selecionados na linha de comando, consegui fazer isso no Angular 7.
Em resumo, você precisa instalar
@angular-devkit/build-angular:browser
e criar um plug-in personalizado do webpack para passar o regex do arquivo de teste. Por exemplo:angular.json - altere o construtor de teste
@angular-devkit/build-angular:browser
e defina um arquivo de configuração personalizado:extra-webpack.config.js - crie uma configuração do webpack que leia o regex na linha de comando:
test.ts - edita as especificações
Em seguida, use o seguinte para substituir o padrão:
Eu documentei a história aqui , desculpando-me antecipadamente por tipos e links incorretos. Agradeço a resposta acima de @ Aish-Anu por me indicar a direção certa.
fonte
Isso está funcionando para mim no Angular 7. É baseado na opção --main do comando ng. Não tenho certeza se esta opção não está documentada e está sujeita a alterações, mas funciona para mim. Coloquei uma linha no meu arquivo package.json na seção scripts. Lá, usando a opção --main com o comando ng test, eu especifico o caminho para o arquivo .spec.ts que quero executar. Por exemplo
Você pode executar o script como qualquer outro script. Eu o executo no Webstorm clicando em "teste 1" na seção npm.
fonte
Eu resolvi esse problema usando o grunhido. Eu tenho o script grunhido abaixo. O que o script faz é pegar o parâmetro de linha de comando do teste específico para executar e criar uma cópia de test.ts e colocar esse nome de teste específico lá.
Para executar isso, primeiro instale o grunt-cli usando:
Coloque as dependências grunt abaixo no seu package.json:
Para executá-lo, salve o arquivo grunt abaixo como Gruntfile.js na sua pasta raiz. Em seguida, na linha de comando, execute-o como:
Isso executará app.component.spec.ts.
O arquivo Grunt é como abaixo:
fonte
Além disso, para pessoas como eu, que estavam procurando uma maneira de executar uma única especificação no Angular e encontraram esse SO.
De acordo com os documentos angulares mais recentes (v9.0.6 no momento da gravação), o
ng test
comando tem uma--include
opção em que você pode especificar um diretório de*.spec.(ts|tsx)
arquivos ou apenas um único.spec.(ts|tsx)
arquivo.https://angular.io/cli/test
fonte
Apenas pequenas alterações necessárias no
test.ts
arquivo dentro da pasta src:Aqui
test-example
está o nome exato do arquivo que precisamos executarDa mesma forma, se você precisar testar apenas o arquivo de serviço, poderá substituir o nome do arquivo como "/test-example.service"
fonte
Isso funcionou para mim em todos os casos:
No entanto, geralmente recebo "TypeError: Não é possível ler a propriedade 'ngModule' nulo" ":
Versão do @ angular / cli 10.0.4
fonte