Execute apenas UM teste com Jest

99

Quero fazer apenas um teste com Jest.

Eu uso it.onlyou describe.only, mas ainda executa muitos testes. Acho que executa todos os testes desde meu último commit, mas não deveria ter esse comportamento com o onlysinalizador definido explicitamente, certo?

O que causa esse comportamento e como posso executar um único teste?

Jpenna
fonte
1
Possível duplicata de Como executo um único teste usando o Jest?
YPCrumble de
Se eu aceitar o "sinalizador de duplicata", isso "marcará sua pergunta como uma duplicata, direcionando futuros leitores à pergunta original e evitando que outras respostas sejam postadas aqui." Não acho que sejam exatamente iguais, já que cada pergunta e resposta têm abordagens diferentes.
jpenna de
@jpenna: basta olhar para a pergunta original. As mesmas respostas foram dadas.
Dan Dascalescu

Respostas:

125

O Jest paraleliza as execuções de teste e não sabe antecipadamente quais testes ele deve executar e quais não deve ser executado. Isso significa que quando você usa "ajustar", ele executará apenas um teste nesse arquivo. Mas ainda executa todos os outros arquivos de teste em seu projeto .

fit, fdescribee it.only, describe.onlytêm o mesmo propósito: pular outros testes e executar apenas eu.

Fonte: https://github.com/facebook/jest/issues/698#issuecomment-177673281


Use o mecanismo de filtragem Jest. Quando você executa seus testes como,

jest --config=jest.config.json --watch

você pode filtrar os testes por um testnameou filename. Basta seguir as instruções do terminal.

Insira a descrição da imagem aqui

Pressione pe digite um nome de arquivo.

Insira a descrição da imagem aqui

Em seguida, você pode usar describe.onlye it.onlyque irá ignorar todos os outros testes do arquivo testado e filtrado.

Dawid Karabin
fonte
1
Estou fazendo esse filtro por arquivo, mas é estranho ... Então .onlysó funciona para os testes do mesmo arquivo?
jpenna
2
Eu gosto ainda mais daquilo .only, como eu costumava esquecer de desfazer .apenas no código-fonte e commitar isso.
Dziamid
3
Mesmo que os testes sejam ignorados, ele ainda parece avaliar o código em teste em cada exemplo. Não há realmente uma maneira de executar um único teste em 2019?
adaam
@adaam Não tenho certeza se entendi sua pergunta corretamente, então corrija-me se estiver errado. Se os testes estiverem em arquivos separados, apenas o código em um arquivo específico é executado quando você usa o padrão para executar os testes explicitamente. Quando o código de um arquivo específico é executado, todo o código desse arquivo é analisado, portanto, mesmo se você usar it.onlyou it.skippara um único teste que contenha erro de sintaxe, todos os testes falharão. É claro que o código de arquivos excluídos por padrão não será executado. imgur.com/z9FlQEZ
Dawid Karabin
@hinok Cole um console.log em seu componente Carrossel e execute novamente o executor de teste. Para mim, mesmo se eu usar if.onlyconsole.logs do componente Carrossel, tantas vezes quanto houver testes ignorados / não ignorados para esse componente em seus padrões de relógio.
adaam
28

it.onlye describe.onlyfuncionam apenas para o módulo em que estão. Se estiver tendo problemas para filtrar testes em vários arquivos, você pode usarjest -t name-of-spec testes de filtragem que correspondem ao nome especificado (comparar com o nome em describe ou test).

Fonte: Opções Jest CLI

Por exemplo, eu foco o teste que estou escrevendo atualmente assim (com o script de teste no package.json):
npm test -- -t "test foo"

Rodgobbi
fonte
4
Isso ainda executa todos os testes no meu caso e não tenho ideia do porquê
Kenny
A única explicação que posso pensar é que você está passando um argumento de string que existe em cada nome de teste (ou describebloco de teste ). Se for esse o caso, você deve restringir o nome do teste exato que deseja focar.
rodgobbi
Esta resposta parece muito mais adequada para outra pergunta: stackoverflow.com/questions/42827054/…
千 木 郷
10

Para mim, funciona se eu usar dois parâmetros como este:

yarn test --watch -f "src/...fullpath.../reducer.spec.js" -t "Name of the test"

Bandeiras:

--watch: is optional

-f: will do filtering of your files, so if you have a lot of tests with the same name, specify the full path to the exact file

-t: works with 'describe' name or 'it' name of your test
Tonco
fonte
8

É tipo isso:

jest sometest.test.js -t "some expression to match a describe or a test"

Ele testará todos os arquivos com o nome sometest.test.jse correspondência com base na opção -t. Se você deseja testar apenas um arquivo específico, pode fazer o seguinte:

jest src/user/.../sometest.test.js
hossein alipour
fonte
Para aqueles que procuram implementar esta opção em um launch.jsonarquivo de configuração VSCode que irá acionar os testes em um caso de teste específico: medium.com/better-programming/…
Gus