Esegui solo UN test con Jest


95

Molto semplice, voglio eseguire un solo test con Jest.

Ho messo it.onlyo describe.onlyma esegue ancora un sacco di test. Penso che esegua tutti i test dal mio ultimo commit, ma non dovrebbe avere questo comportamento con il onlyflag impostato esplicitamente, giusto?

Cosa causa questo comportamento e come eseguire un singolo test?



Se accetto il "contrassegno duplicato", "contrassegnerà la tua domanda come duplicata, indirizzando i futuri lettori alla domanda originale e impedendo che ulteriori risposte vengano pubblicate qui". Non penso che siano esattamente la stessa cosa, dal momento che ogni domanda e risposta stanno adottando approcci diversi.
jpenna

@ jpenna: guarda la domanda originale. Sono state date le stesse risposte.
Dan Dascalescu

Risposte:


122

Jest parallelizza le esecuzioni dei test e non sa in anticipo quali test dovrebbe eseguire e quali non dovrebbe. Ciò significa che quando si utilizza "fit", verrà eseguito solo un test in quel file ma continuerà a eseguire tutti gli altri file di test nel progetto .

fit, fdescribeE it.only, describe.onlyhanno lo stesso scopo, saltare gli altri test, eseguito solo me.

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


Usa il jestmeccanismo di filtro, quando esegui i tuoi test come

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

Puoi filtrare i test con testnameo filename, basta seguire le istruzioni nel terminale

inserisci qui la descrizione dell'immagine

Premere p, quindi digitare un nome file

inserisci qui la descrizione dell'immagine

Quindi puoi usare describe.onlye it.onlyche salterà tutti gli altri test dal file filtrato e testato.


1
Sto facendo questo filtro per file, ma è strano ... Quindi .onlyfunziona solo per i test dello stesso file?
jpenna

2
Mi piace ancora di più quella cosa .only, dato che dimenticavo di annullare .only nel codice sorgente e di eseguire il commit.
Dziamid

3
Anche se i test vengono saltati, sembra ancora valutare il codice sottoposto a test in ogni esempio. Non esiste davvero un modo per eseguire un solo test nel 2019?
adaam

@adaam Non sono sicuro di aver capito bene la tua domanda, quindi correggimi se sbaglio. Se i test sono in file separati, solo il codice in un file specifico viene eseguito quando si utilizza pattern per eseguire i test in modo esplicito. Quando viene eseguito il codice per un file specifico, l'intero codice in quel file viene analizzato, quindi anche se si utilizza it.onlyo it.skipper un singolo test che contiene errori di sintassi, tutti i test avranno esito negativo. Ovviamente il codice dei file esclusi dal pattern non verrà eseguito. imgur.com/z9FlQEZ
Dawid Karabin

@hinok Incolla un console.log nel tuo componente Carousel e riesegui il tuo test runner. Per me, anche se lo uso if.onlyconsole.logs dal componente Carousel tante volte quanti sono i test ignorati / non ignorati per quel Componente nei modelli di controllo.
adaam

29

it.onlye describe.onlyfunzionano solo per il modulo in cui si trovano. Se si riscontrano problemi nel filtrare i test in più file, è possibile utilizzare jest -t name-of-spec, filtrando i test che corrispondono al nome della specifica (corrispondenza con il nome in descrivere o test).
Fonte: https://facebook.github.io/jest/docs/en/cli.html

Ad esempio, concentro il test che sto attualmente scrivendo in questo modo (con lo script di test nel package.json):
npm test -- -t "test foo"


4
Questo esegue ancora ogni singolo test nel mio caso e non ho idea del perché
Kenny il

L'unica spiegazione a cui posso pensare è che stai passando un argomento stringa che esiste in ogni singolo nome di test (o describeblocco di test ). In questo caso, dovresti restringere il campo al nome esatto del test su cui desideri concentrarti.
rodgobbi

Questa risposta sembra molto più adatta per un'altra domanda: stackoverflow.com/questions/42827054/…
千 木 郷

8

è così:

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

testerà tutti i file con il nome sometest.test.jse la corrispondenza in base all'opzione -t, se vuoi solo testare un file specifico puoi farlo:

jest src/user/.../sometest.test.js

Per coloro che desiderano implementare questa opzione in un launch.jsonfile di configurazione VSCode che attiverà i test in uno specifico caso di test: medium.com/better-programming/…
Gus

8

Per me funziona se uso 2 parametri come questo:

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

Bandiere:

--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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.