¿Cómo pruebo un solo archivo con Jest?

361

Puedo probar varios archivos usando Jest, pero no puedo entender cómo probar un solo archivo.

Yo tengo:

  • correr npm install jest-cli --save-dev
  • Actualizado package.json: `{..." scripts ": {" test ":" jest "} ...}
  • Escrito una serie de pruebas.

La ejecución npm testfunciona como se esperaba (actualmente ejecuta 14 pruebas).

¿Cómo pruebo un solo archivo, por ejemplo, prueba app/foo/__tests__/bar.spec.js?

He intentado ejecutar npm test app/foo/__tests__/bar.spec.js(desde la raíz del proyecto), pero aparece el siguiente error:

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

Gracias

Mosquete
fuente

Respuestas:

298

Para ejecutar una prueba específica, deberá usar el jestcomando. npm testno trabajará. Para acceder jestdirectamente en la línea de comandos, instálelo a través de npm i -g jest-clio yarn global add jest-cli.

Luego simplemente ejecute su prueba específica con jest bar.spec.js.

Nota : No tiene que ingresar la ruta completa a su archivo de prueba. El argumento se interpreta como una expresión regular. Basta cualquier parte de la ruta completa que identifique un archivo de forma exclusiva.

ncuillery
fuente
55
Lamentablemente, esto no funciona para mí. Correr jest bar.spec.jsda jest: command not found. He confirmado que Jest está instalado ( npm list -g jestmuestra [email protected]). FWIW, cuando corro usando npm testlo usa jest-cli.
Mosquete
44
Sí, jest-clies el módulo correcto, instálelo globalmente npm install -g jest-cli. jesten npm es ... algo más
ncuillery
56
Eso es incorrecto El trabajo de prueba de npm no significa que jest esté instalado globalmente. Solo significa que jest está instalado dentro de su proyecto.
Chiedo
20
Como dijo @ChiedoJohn. Para ejecutarlo sin instalarlo globalmente, puede ejecutarlo desde la raíz de su aplicación:node_modules/.bin/jest args
Eddie Monge Jr
3
Si está utilizando la configuración predeterminada de jazmín, puede enfocar una sola prueba utilizando en fitlugar de it.
eremzeit
381

Todo lo que tienes que hacer es cantar el encantamiento mágico:

npm test -- SomeTestFileToRun

Lo independiente --es * nix magic para marcar el final de las opciones, lo que significa (para NPM) que todo después de eso se pasa al comando que se ejecuta, en este caso jest. Como comentario adicional, puede mostrar notas de uso de bromas diciendo

npm test -- --help

De todos modos, cantando

npm test -- Foo

ejecuta las pruebas en el archivo nombrado ( FooBar.js). Sin embargo, debe tener en cuenta que:

  • Jest trata el nombre como sensible a mayúsculas y minúsculas, por lo que si está utilizando un sistema de archivos que no distingue entre mayúsculas y minúsculas (como Windows NTFS), puede encontrar lo que parece ser extraño.

  • Jest parece tratar la especificación como un prefijo.

Entonces el encantamiento anterior

  • Correr FooBar.js, Foo.jsyFooZilla.js
  • Pero NO correr foo.js
Nicholas Carey
fuente
Gracias, desafortunadamente recibo el mismo error cuando ejecuto esto:npm ERR! Error: ENOENT, open '<path to project>/node_modules/<name of file>/package.json'
Musket
1
¿Existe algún método alternativo para ejecutar pruebas jest aparte de la línea de comando? , como si realizara una solicitud posterior a mi proyecto existente, la API de descanso me dará un problema de token CSRF. ¿Cómo voy a configurar jest testing para mi proyecto existente? para que comience a servir la solicitud usando '/ rest-api' en lugar de ' localhost: 8000 / rest-api '
Suyog Sawant
@SuyogSawant: eso no es un comentario. Es una pregunta por sí sola. Debería preguntarlo aquí en StackOverflow.
Nicholas Carey
1
en mi caso, simplemente npm test ToDoForm.test.jsfuncionó mientras jest ToDoForm.test.jsno lo hacía
Tomasz Mularczyk
su segundo punto sobre mayúsculas y minúsculas no coincide con el encantamiento que proporcionó anteriormente.
NSjonas
38

Para ejecutar una prueba individual:

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

-t- Después de poner una expresión regular que contiene el nombre de la prueba.

cabaji99
fuente
1
¡Increíble! Funcionó genial!
Flavio
21

Usar npm testno significa que jest se instale globalmente. Simplemente significa que "prueba" está asignada al uso de jest en su paquete.json

Lo siguiente es lo que funcionó para mí, en el nivel raíz del proyecto:

node_modules/.bin/jest [args]

Los argumentos pueden ser el archivo de prueba que desea ejecutar o el directorio que contiene varios archivos.

AeroHil
fuente
Trabajó para mí;)
wogsland
1
¡Gracias! ¡Esto fue muy útil para mí!
Isaac
55
un atajo para ejecutar binarios node_modules/.bines usar el npxcomando. Por ejemplonpx jest [args]
Sergio Mazzoleni el
16

si lo usa yarn, puede agregar el archivo .spec.jso .test.jsdirectamente después de:

yarn test src/lib/myfile.test.js

Esta es la parte de my package.jsoncon jest install como un paquete local (eliminó las partes relevantes):

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

}
Andreas Heissenberger
fuente
11

Puede usar el nombre del archivo con npm test --:

npm test -- fileName.jsx 
Hilal Aissani
fuente
1
esa debería ser la respuesta!
Allan Stepps
6

Si está ejecutando npm >= 5.2.0y ha instalado jest localmente como devDependenciescon npm i -d jest, puede ejecutar jest en un archivo en particular haciendonpx jest /path/to/your/spec.js

bmaggi
fuente
5

Estamos usando nrwl-nx con angular . En este caso podemos usar este comando:

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

notas:

  • npm test ejecutará el script de prueba especificado en package.json : "test:client": "ng test client"
  • así, el resto del cmd se pasará a ng test
    • <ng-project> es el nombre de un proyecto en angular.json
      • cuando omite este parámetro, el "defaultProject"(especificado enangular.json , se utilizará ) (por lo que debe especificarlo, cuando la prueba no esté en su proyecto predeterminado)
    • A continuación, debemos comprobar qué constructor se utiliza:
      • en angular.jsonnavegar a "project"- "<ng-project>"- "architect"-"test"
      • y verifique "builder", que en nuestro caso es:"@nrwl/jest:jest"
    • ahora que conocemos el constructor, necesitamos encontrar los parámetros de línea cmd disponibles
      • en la línea de comando, ejecute npm test server -- --helppara ver todas las opciones disponibles
      • o mira los documentos en línea
    • una de las opciones es la --testFileque se usa aquí
TmTron
fuente
Ese fue el que lo hizo por mí porque estamos usando nx. Gracias.
usuario906573
4

Así es como ejecuto dinámicamente las pruebas en un archivo específico sin reiniciar la prueba. Mi proyecto de reacción fue creado fuecreate-react-app

así que mira la prueba de cambios, ejecutando automáticamente la prueba cuando hago cambios.

Esto es lo que veo al final de los resultados de la prueba en el 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.

Presione 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.

luego presione 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.

Esto es después de que quería ejecutar el archivo 'index.es6.js' en la carpeta 'Iniciar sesión'

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

Así es como ejecuto pruebas en un archivo específico.

deko
fuente
1

Acabo de instalar Jest como globalmente y luego corrí jest myFileToTest.spec.jsy funcionó

URL87
fuente
1

Tienes dos opciones:

  • Opción 1: línea de comando. Puedes ejecutar el siguiente 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'

Esto evita que instales Jest a nivel mundial. Usas la broma utilizada por tu proyecto.

  • Opción 2: si está utilizando VS Code , tiene un excelente complemento para hacer esto: Jest Runner . Le permite no solo ejecutar pruebas archivo por archivo, sino incluso suites y especificaciones específicas simplemente haciendo clic con el botón derecho en las pruebas que desea ejecutar.
Hay OUE
fuente
0

Jest usará lo que pases como un patrón regex . Eso coincidirá para.

Si desea ejecutar un archivo de prueba específico. Entonces, la mejor manera de hacerlo es precisar el camino completo hacia él. (Puede precisar demasiado una determinada ruta relativa como (src / XFolder / index.spec.ts)).

La forma más fácil de proporcionar la ruta completa en el directorio y en Linux es:

jest $PWD/index.spec.ts

Tenga en cuenta el uso de la variable $ PWD .

ingrese la descripción de la imagen aquí

Para ventanas ! (Para actualizarse)

Mohamed Allal
fuente
0

Con Angular y Jest puedes agregar esto a package.json en "scripts"

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

Luego, para ejecutar la prueba unitaria para un archivo específico, puede escribir este comando en su terminal

npm run test:debug modules/myModule/someTest.spec.ts
Fotónico
fuente