Ejecute solo UNA prueba con Jest

95

Muy simple, quiero ejecutar solo una prueba con Jest.

Puse it.onlyo, describe.onlypero todavía ejecuta muchas pruebas. Creo que ejecuta todas las pruebas desde mi última confirmación, pero no debería tener este comportamiento con la onlybandera establecida explícitamente, ¿verdad?

¿Qué causa este comportamiento y cómo ejecutar una única prueba?

jpenna
fuente
1
Posible duplicado de ¿Cómo ejecuto una única prueba con Jest?
YPCrumble
Si acepto la "marca de duplicado", "marcará su pregunta como un duplicado, dirigiendo a los futuros lectores a la pregunta original y evitando que se publiquen más respuestas aquí". No creo que sean exactamente iguales, ya que cada pregunta y respuesta adoptan enfoques diferentes.
jpenna
@jpenna: solo mira la pregunta original. Se dieron las mismas respuestas.
Dan Dascalescu

Respuestas:

122

Jest paraleliza las ejecuciones de prueba y no sabe de antemano qué pruebas debe ejecutar y cuáles no. Esto significa que cuando usa "fit", solo ejecutará una prueba en ese archivo pero aún ejecutará todos los demás archivos de prueba en su proyecto .

fit, fdescribey it.only, describe.onlytienen el mismo propósito, omitir otras pruebas, ejecutar solo yo.

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


Utilice el jestmecanismo de filtrado, cuando ejecute sus pruebas como

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

Puede filtrar las pruebas por testnameo filename, simplemente siga las instrucciones en la terminal

ingrese la descripción de la imagen aquí

Presione p, luego escriba un nombre de archivo

ingrese la descripción de la imagen aquí

Luego puede usar describe.onlyy it.onlyque omitirá todas las demás pruebas del archivo filtrado y probado.

Dawid Karabin
fuente
1
Estoy haciendo este filtro por archivo, pero es extraño ... Entonces, ¿lo .onlyúnico que funciona para las pruebas del mismo archivo?
jpenna
2
Me gusta aún más esa cosa .only, ya que solía olvidarme de deshacer .only en el código fuente y confirmarlo.
Dziamid
3
Aunque se omiten las pruebas, parece que se evalúa el código bajo prueba en cada ejemplo. ¿No hay realmente una forma de ejecutar una sola prueba en 2019?
adaam
@adaam No estoy seguro de haber entendido tu pregunta correctamente, así que corrígeme si me equivoco. Si las pruebas están en archivos separados, solo se ejecuta el código en un archivo específico cuando usa el patrón para ejecutar pruebas explícitamente. Cuando se ejecuta el código para un archivo específico, se analiza todo el código en ese archivo, por lo que incluso si usa it.onlyo it.skippara una sola prueba que contiene un error de sintaxis, todas las pruebas fallarán. Por supuesto, el código de los archivos excluidos por patrón no se ejecutará. imgur.com/z9FlQEZ
Dawid Karabin
@hinok Inserta un console.log en tu componente Carousel y vuelve a ejecutar tu corredor de prueba. Para mí, incluso si lo uso if.onlyconsole.logs del componente Carousel tantas veces como haya pruebas omitidas / no omitidas para ese componente en tus patrones de reloj.
adaam
29

it.onlyy describe.onlyfuncionan solo para el módulo en el que se encuentran. Si tiene problemas para filtrar pruebas en varios archivos, puede utilizar jest -t name-of-specpruebas de filtrado que coincidan con el nombre de la especificación (coincidan con el nombre en describir o probar).
Fuente: https://facebook.github.io/jest/docs/en/cli.html

Por ejemplo, me enfoco en la prueba que estoy escribiendo actualmente así (con el script de prueba en package.json):
npm test -- -t "test foo"

rodgobbi
fuente
4
Esto todavía ejecuta todas las pruebas en mi caso y no tengo idea de por qué
Kenny
La única explicación que se me ocurre es que está pasando un argumento de cadena que existe en cada nombre de prueba (o describebloque de prueba ). Si ese es el caso, debe limitarse al nombre exacto de la prueba que desea enfocar.
rodgobbi
Esta respuesta parece mucho más adecuada para otra pregunta: stackoverflow.com/questions/42827054/…
千 木 郷
8

Es como esto:

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

probará todos los archivos con el nombre sometest.test.jsy la coincidencia según la opción -t, si solo desea probar un archivo específico, puede hacer esto:

jest src/user/.../sometest.test.js
hossein alipour
fuente
Para aquellos que buscan implementar esta opción en un launch.jsonarchivo de configuración de VSCode que activará las pruebas en un caso de prueba específico: medium.com/better-programming/…
Gus
8

Para mí, funciona si uso 2 parámetros como este:

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

Banderas:

--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
fuente