Executando um único arquivo de teste

138

Existe uma maneira de executar ng testum único arquivo em vez de para todo o conjunto de testes? Idealmente, eu gostaria de obter o loop de feedback mais rápido possível ao editar um arquivo, mas karmaexecuta todo o conjunto em cada salvamento, o que é um pouco lento quando você cria um conjunto de testes suficientemente grande.


Isso é diferente de Como executar apenas uma especificação de teste com angular-cli , pois a questão é sobre a execução de uma especificação individual. Trata-se de executar um arquivo individual. A solução envolve o mesmo recurso de especificação do Jasmine, mas a natureza da pergunta é um pouco diferente.

Elliot Larson
fonte
Você pode encontrar uma resposta aqui: stackoverflow.com/questions/40683673/…
Sahil Shikalgar
Você pode encontrar uma resposta aqui: stackoverflow.com/questions/40683673/…
Sahil Shikalgar

Respostas:

261

Descobri que o Jasmine permite prefixar describee itmétodos com um f(para foco?). Então fdescribee fit. Se você usar um desses, o karma executará apenas os testes relevantes. Portanto, para focar o arquivo atual, você pode simplesmente pegar o nível superior describee alterá-lo para fdescribe. Funciona para meus propósitos.

Elliot Larson
fonte
9
Resposta lendária
danday74 /
2
Não posso acreditar que uma funcionalidade tão importante não seja mais óbvia e direta.
Ash
10
funciona, mas não é o ideal, porque você precisa alterar o código-fonte e pode acabar verificando o código modificado no controle de origem.
Marco Altieri
4
Por favor, adicione links para a documentação oficial , quando possível
jgpATs2w 28/11
Eu estive pesquisando isso, Awesome
Carlos E
26

Vale ressaltar que você pode desativar um teste específico sem comentar xdescribeexit

xdescribe('Hello world', () => { 
  xit('says hello', () => { 
    expect(helloWorld())
        .toEqual('Hello world!');
  });
});

E como alguém já disse, se você quiser se concentrar em algum teste, então fdescribeefit

fdescribe('Hello world', () => { 
  fit('says hello', () => { 
    expect(helloWorld())
        .toEqual('Hello world!');
  });
});
DiPix
fonte
25

Isso pode ser alcançado nos dias de hoje através da includeopção. https://angular.io/cli/test#options

É uma correspondência global, como um exemplo:

ng test --include='**/someFolder/*.spec.ts'

Não consigo encontrá-lo nas notas de versão 8.1.0 , mas o @Swoox menciona abaixo que este é um recurso após a versão CLI 8.1.0. Obrigado por descobrir isso.

Levi
fonte
1
Parece uma atualização recente. Pode querer incluir a versão necessária. CLI 8.1 é necessário.
Swoox 14/01
Parece ser removido na v9.1 :(
rmcsharry
2
Acabei de testar isso na CLI v9.1.0 e funciona perfeitamente.
Sajjan Singh
9

Eu descobri que ng testtem uma opção adicional --includeque você pode usar para poder executar o teste de um único arquivo ou de um diretório específico ou de vários arquivos:

// one file
npm run test -- --include src/app/components/component/component-name.component.spec.ts

// directory or bunch of files
npm run test -- --include src/app/components

ng cli docs

var-bin
fonte
Angular 9 - parece ter sido removido
rmcsharry
Não, ainda está disponível no NG 9.
tephyr 11/06
6

Você pode acessar src/test.tse alterar a seguinte linha:

const context = require.context('./', true, /\.spec\.ts$/);

para

const context = require.context('./', true, /**yourcomponent.component**\.spec\.ts$/);

insira a descrição da imagem aqui

Raghav
fonte
1
A rigor, isso parece a resposta mais correta, embora a maioria das perguntas sobre como fazer isso tenha o problema resolvido usando o fit e o fdescribe. Existe um problema do git para fazer isso mais facilmente no Karma: github.com/karma-runner/karma/issues/1507 . Idealmente, embora não simplesmente, poderíamos configurar o Karma para poder fazer alterações em um teste e, em seguida, basta clicar nele no navegador para executá-lo novamente com a atualização.
Pumpkinthehead
3

Usando ng test --main file.spec.ts

Niraj
fonte
0

Você deve ir src/test.tse pode alterar o seguinte código de número de linha 18:

//Then we find all the tests.
const context = require.context('./', true, /\.spec\.ts$/);

para

//Then we find all the tests.
const context = require.context('./', true, /testing.component\.spec\.ts$/);

insira a descrição da imagem aqui

Priti jha
fonte
-3

Funciona se você especificar seu arquivo de especificação como parâmetro.

Por exemplo:

ng test foo.spec.ts

Espero que isto ajude.

gustavomcastro
fonte
4
Você pode especificar qual versão você está usando? Não está funcionando com 1.7.x
FrEaKmAn
4
Também não funcionou como está para mim. Mas eu o modifiquei para trabalhar com a opção --main antes do caminho para o arquivo de especificações. Eu usei um caminho absoluto com barras. Não tentei um caminho relativo. Usando o Angular 6. Não tenho certeza se é a melhor solução, mas parece funcionar para mim.
precisa saber é o seguinte