Como testo um único arquivo usando o Jest?

360

Consigo testar vários arquivos usando o Jest, mas não consigo descobrir como testar um único arquivo.

Eu tenho:

  • Corre npm install jest-cli --save-dev
  • Atualizado package.json: `{..." scripts ": {" test ":" jest "} ...}
  • Escreveu uma série de testes.

A execução npm testfunciona conforme o esperado (atualmente executa 14 testes).

Como testo um único arquivo, por exemplo, teste app/foo/__tests__/bar.spec.js?

Eu tentei executar npm test app/foo/__tests__/bar.spec.js(da raiz do projeto), mas recebo o seguinte erro:

npm ERR! Error: ENOENT, open '<path to project>/node_modules/app/foo/__tests__/bar.spec.js/package.json'

obrigado

Mosquete
fonte

Respostas:

298

Para executar um teste específico, você precisará usar o jestcomando npm testnão funciona. Para acessar jestdiretamente na linha de comando, instale-o via npm i -g jest-cliou yarn global add jest-cli.

Em seguida, basta executar seu teste específico com jest bar.spec.js.

Nota : Você não precisa inserir o caminho completo para o seu arquivo de teste. O argumento é interpretado como uma expressão regular. Qualquer parte do caminho completo que identifique exclusivamente um arquivo é suficiente.

ncuillery
fonte
5
Infelizmente isso não está funcionando para mim. Correr jest bar.spec.jsjest: command not found. Eu confirmei que o Jest está instalado ( npm list -g jestshows [email protected]). FWIW, quando eu corro usando npm testele usa jest-cli.
26915 Mosquete
4
Sim, jest-clié o módulo certo, instale-o globalmente npm install -g jest-cli. jestem npm é ... outra coisa
ncuillery
56
Isso está incorreto. O funcionamento do teste npm não significa que o gracejo seja instalado globalmente. Significa apenas que o gracejo está instalado dentro do seu projeto.
Chiedo
20
Como o @ChiedoJohn disse. Para executá-lo sem instalar globalmente, você pode executá-lo a partir da raiz do seu aplicativo:node_modules/.bin/jest args
Eddie Monge Jr
3
Se você estiver usando a configuração padrão do jasmim, poderá concentrar um único teste usando em fitvez de it.
precisa saber é o seguinte
380

Tudo que você precisa fazer é cantar o encantamento mágico:

npm test -- SomeTestFileToRun

O autônomo --é * nix magic para marcar o final das opções, o que significa (para o NPM) que tudo depois disso é passado para o comando em execução, neste caso jest. Como um aparte, você pode exibir notas de uso de gracejo dizendo

npm test -- --help

De qualquer forma, cantando

npm test -- Foo

executa os testes no arquivo nomeado ( FooBar.js). Você deve observar, porém, que:

  • O Jest trata o nome como distinção entre maiúsculas e minúsculas, portanto, se você estiver usando um sistema de arquivos que não diferencia maiúsculas de minúsculas, mas que preserva maiúsculas e minúsculas (como o Windows NTFS), pode encontrar o que parece ser uma coisa estranha acontecendo.

  • Jest parece tratar as especificações como um prefixo.

Portanto, o encantamento acima

  • Executar FooBar.js, Foo.jseFooZilla.js
  • Mas NÃO corra foo.js
Nicholas Carey
fonte
Obrigado, infelizmente, recebo o mesmo erro ao executar isso:npm ERR! Error: ENOENT, open '<path to project>/node_modules/<name of file>/package.json'
Musket 2/15
11
Existe algum método alternativo para executar testes de gracejo além da linha de comando? , como se eu fizesse uma solicitação de postagem para o restante das minhas APIs de projeto existentes, isso me dará um problema de token CSRF. Como vou configurar o teste de brincadeira para o meu projeto existente? para que ele comece a atender à solicitação usando '/ rest-api' em vez de ' localhost: 8000 / rest-api '
Suyog Sawant
@SuyogSawant: isso não é um comentário. é uma pergunta por si só. Você deve perguntar aqui no StackOverflow.
Nicholas Carey
11
no meu caso, simples, npm test ToDoForm.test.jstrabalhou enquanto jest ToDoForm.test.jsnão
Tomasz Mularczyk
seu segundo ponto sobre a distinção entre maiúsculas e minúsculas não corresponde ao encantamento fornecido acima.
NSjonas
38

Para executar um teste individual:

npm test -t ValidationUtil # `ValidationUtil` its my module `ValidationUtil.spec.js`

-t- depois de colocar um regex contendo o nome do teste.

cabaji99
fonte
11
Impressionante! Trabalhou muito bem!
Flavio
21

Usando npm test não significa que o gracejo seja instalado globalmente. Significa apenas que "teste" é mapeado para usar o jest no seu package.json

A seguir, o que funcionou para mim, no nível raiz do projeto:

node_modules/.bin/jest [args]

args pode ser o arquivo de teste que você deseja executar ou o diretório que contém vários arquivos.

AeroHil
fonte
Trabalhou para mim;)
wogsland
11
obrigado! isso foi muito útil para mim!
Isaac
5
um atalho para executar binários node_modules/.biné usar o npxcomando Por exemplonpx jest [args]
Sergio Mazzoleni
16

se você usar, yarnpoderá adicionar o arquivo .spec.jsou .test.jsdiretamente após:

yarn test src/lib/myfile.test.js

Esta é a parte da minha package.jsoninstalação com jest como um pacote local (as partes relevantes foram removidas):

{
...
  "scripts": {
    "test": "jest",
    "testw": "jest --watch",
    "testc": "jest --coverage",
...
  },
  "devDependencies": {
    "jest": "^18.1.0",
    ...
  },

}
Andreas Heissenberger
fonte
11

Você pode usar o nome do arquivo com npm test --:

npm test -- fileName.jsx 
Hilal Aissani
fonte
11
essa deve ser a resposta!
Allan Stepps
6

Se você estiver executando npm >= 5.2.0e tiver instalado o gracejo localmente como um devDependenciescom, npm i -d jestpoderá executar o gracejo em um arquivo específico, executandonpx jest /path/to/your/spec.js

bmaggi
fonte
5

Estamos usando o nrwl-nx com angular . Neste caso, podemos usar este comando:

npm test <ng-project> -- --testFile "file-name-part"

notas:

  • npm testexecutará o script de teste especificado em package.json: "test:client": "ng test client"
  • assim, o restante do cmd será passado para o teste ng
    • <ng-project> é o nome de um projeto em angular.json
      • quando você omitir esse parâmetro, o "defaultProject"(especificado em angular.json) será usado (portanto, você deve especificá-lo, quando o teste não estiver no seu projeto padrão)
    • Em seguida, devemos verificar qual construtor é usado:
      • em angular.jsonnavegar para "project"- "<ng-project>"- "architect"-"test"
      • e verifique o "builder"que, no nosso caso, é:"@nrwl/jest:jest"
    • agora que conhecemos o construtor, precisamos encontrar os parâmetros de linha cmd disponíveis
      • na linha de comandos, execute npm test server -- --helppara ver todas as opções disponíveis
      • ou verifique os documentos on - line
    • uma das opções --testFileé usada aqui
TmTron
fonte
Foi o que fez isso por mim porque estamos usando o nx. Obrigado.
user906573 20/02
4

É assim que executo dinamicamente testes em um arquivo específico sem reiniciar o teste. Meu projeto de reação foi criado foicreate-react-app

então ele assiste ao teste de alterações, executando automaticamente o teste quando eu faço alterações.

Então é isso que vejo no final dos resultados do teste no terminal.

Test Suites: 16 passed, 16 total
Tests:       98 passed, 98 total
Snapshots:   0 total
Time:        5.048s
Ran all test suites.

Watch Usage: Press w to show more.

Pressione W

Watch Usage
  Press f to run only failed tests.
  Press o to only run tests related to changed files.
  Press q to quit watch mode.
  Press p to filter by a filename regex pattern.
  Press t to filter by a test name regex pattern.
  Press Enter to trigger a test run.

depois pressione P

Pattern Mode Usage
  Press Esc to exit pattern mode.
  Press Enter to filter by a filenames regex pattern.

 pattern 

 Start typing to filter by a filename regex pattern.

isso foi depois que eu queria executar o arquivo 'index.es6.js' na pasta 'Login'

Pattern Mode Usage
  Press Esc to exit pattern mode.
  Press Enter to filter by a filenames regex pattern.

 pattern  login/index

 Pattern matches 1 file
  src/containers/Login/index.es6.test.js

É assim que eu executo testes em um arquivo específico.

deko
fonte
1

Acabei de instalar o gracejo como globalmente e depois corri jest myFileToTest.spec.jse funcionou

URL87
fonte
1

Você tem duas opções:

  • Opção 1: linha de comando. Você pode executar o seguinte comando
node '/Users/complete-path-to-you-project/your-project/node_modules/.bin/jest' '/Users/complete-path-to-you-project/your-project/path-to-your-file-within-the-project/your-file.spec.ts'

Isso evita que você instale o Jest globalmente. Você usa o gracejo usado pelo seu projeto.

  • Opção 2: Se você estiver usando o VS Code, terá um ótimo plugin para fazer isso: Jest Runner . Ele permite não apenas executar testes arquivo por arquivo, mas até mesmo suítes e especificações específicas, clicando com o botão direito do mouse nos testes que você deseja executar.
Hay OUE
fonte
0

O Jest usará o que você passa como um padrão regex . Isso corresponde a.

Se você deseja executar um arquivo de teste específico. Então a melhor maneira de fazer isso é precisar o caminho completo para isso. (Você pode precisar muito de um determinado caminho relativo, como (src / XFolder / index.spec.ts)).

A maneira mais fácil de fornecer o caminho completo no diretório e no linux é:

jest $PWD/index.spec.ts

Observe o uso da variável $ PWD .

insira a descrição da imagem aqui

Para Windows ! (ser atualizado)

Mohamed Allal
fonte
0

Com Angular e Jest, você pode adicioná-lo ao package.json em "scripts"

"test:debug": "node --inspect-brk ./node_modules/jest/bin/jest.js --runInBand"

Em seguida, para executar o teste de unidade para um arquivo específico, você pode escrever este comando no seu terminal

npm run test:debug modules/myModule/someTest.spec.ts
Photonic
fonte