Come posso eseguire un singolo test usando Jest?


356

Ho un test "funziona con i bambini nidificati" all'interno del file fix-order-test.js.

L'esecuzione di seguito esegue tutti i test nel file.

jest fix-order-test

Come posso eseguire un solo test? Di seguito non funziona in quanto cerca un file della regex specificato.

jest 'works with nested children'

1
Dai

dal momento che stai usando la riga di comando jest, probabilmente attraverso npm quindi aggiungi solo le --testNamePattern 'works with nested children' opzioni della CLI Jest #testNamePattern
steven87vt

@BioGenX: il collegamento è ora interrotto
Dan Dascalescu il

Risposte:


429

Dalla riga di comando utilizzare il flag --testNamePatterno-t

jest -t 'fix-order-test'

Questo eseguirà solo test che corrispondono al modello di nome test fornito. È nei documenti di Jest .

Un altro modo è eseguire i test in modalità orologio jest --watche quindi premere pper filtrare i test digitando il nome del file di test o tper eseguire un singolo nome di test.


Se hai l' itinterno di un describeblocco, devi correre

jest -t '<describeString> <itString>'

Ricevo opzioni non riconosciute per -t. Sì, la documentazione lo menziona. Il flag è stato aggiunto in 16.0. Sono all'ultima versione. jest -help non sembra menzionare la bandiera. Grazie.
vijayst,

12
Solo una nota che questo è il modello di test per il nome del test specifico all'interno della it()funzione e non il nome del file. Questo è quello che ho pensato.
HussienK,

70
Se si utilizza il test npm, è necessario eseguirenpm test -- -t "fix order test"
Sarsaparilla il

3
Questo funziona per me, ma salta anche ogni altro test nel progetto che è lento per progetti di grandi dimensioni. Specificare un file di test specifico in cui si trova il test aiuta davvero:./node_modules/.bin/jest --config=./.jest.config.json ./src/x/y/sites.js/sitesWorker.test.js -t 'given only incorrect sites'
anon58192932

Funziona con me senza specificare <describeString>, ho notato che le magnitudini sono più lente della grep di moka (-g 'searchString') - ma lo prenderò :-)
schmoopy il

125

La documentazione di Jest raccomanda quanto segue:

Se un test fallisce, una delle prime cose da controllare dovrebbe essere se il test fallisce quando è l'unico test che viene eseguito. In Jest è semplice eseguire un solo test: basta cambiare temporaneamente quel test comando in atest.only

test.only('this will be the only test that runs', () => {
   expect(true).toBe(false);
});

o

it.only('this will be the only test that runs', () => {
   expect(true).toBe(false);
});

7
Funziona per me con jest 20.0.4. Anche se salta solo il resto dei test in quel file. I test in altri file continuano a essere eseguiti, a meno che tu non abbia già limitato l'esecuzione a un solo file.
Holf,

7
Questa è una cosa scherzosa però - poiché esegue i test in modo asincrono probabilmente non è in grado di determinare quale test eseguire in quale file dall'inizio. Quindi eseguirà tutti i file per impostazione predefinita e ALL'INTERNO della ricerca dei file test.only. Quindi, se vuoi eseguire solo un test all'interno di un file che ha molti casi di test all'interno di una suite di testcase che comprende molti file, sfortunatamente devi eseguire quel singolo filejest myTestFile.test.js
traballante

@johnslay: Sì, l'ho appena provato
traballante

@ Fiocco Immagino volessi dire che non funziona durante l'esecuzione npm test. Dovrai eseguire il file da solo o premere pper impostare un filtro.
johnslay,

3
@johnslay bene, grazie per aver letto i commenti precedenti prima di scrivere la tua risposta, immagino / i :)
traballante

55

Come menzionato in altre risposte, test.onlyfiltra semplicemente altri test nello stesso file . Quindi verrebbero comunque eseguiti test in altri file.

Quindi, per eseguire un singolo test, ci sono due approcci:

  • Opzione 1: se il nome del test è univoco, è possibile immettere tin modalità orologio e immettere il nome del test che si desidera eseguire.

  • Opzione 2:

    1. Premi pin modalità orologio per inserire una regex per il nome file che desideri eseguire. (I comandi rilevanti come questo vengono visualizzati quando si esegue Jest in modalità orologio).
    2. Passare ital it.onlytest che si desidera eseguire.

Con uno dei due approcci sopra, Jest eseguirà il singolo test nel file che hai specificato.


54

Comando completo per eseguire un singolo test Jest

Comando:

node <path-to-jest> -i <you-test-file> -c <jest-config> -t "<test-block-name>"

  • <path-to-jest>:
    • Finestre: node_modules\jest\bin\jest.js
    • Altri: node_modules/.bin/jest
  • -i <you-test-file>: percorso del file con test ( jso ts)
  • -c <jest-config>: percorso di un file di configurazione Jest separato (JSON), se mantieni la tua configurazione Jest package.jsonnon devi specificare questo parametro (Jest lo troverà senza il tuo aiuto)
  • -t <the-name-of-test-block>: In realtà si tratta di un nome (il primo parametro) di describe(...), it(...)o test(...)blocco.

Esempio:

describe("math tests", () => {

  it("1 + 1 = 2", () => {
    expect(1 + 1).toBe(2);
  });

  it("-1 * -1 !== -1", () => {
    expect(-1 * -1).not.toBe(-1);
  });

});

Quindi, il comando

node node_modules/jest/bin/jest.js -i test/math-tests.js -c test/tests-config.json -t "1 + 1 = 2"

eseguirà il test it("1 + 1 = 2", ...), ma se cambi il -tparametro in "math tests"allora eseguirà entrambi i test dal describe("math tests",...)blocco.

Osservazioni:

  1. Per Windows sostituire node_modules/.bin/jestcon node_modules\jest\bin\jest.js.
  2. Questo approccio consente di eseguire il debug dello script in esecuzione. Per abilitare il debug aggiungere il '--inspect-brk'parametro al comando.

Esecuzione di un singolo test Jest tramite script NPM in "package.json"

Avendo installato Jest puoi semplificare la sintassi di questo comando (sopra) usando gli script NPM . In "package.json"aggiungi un nuovo script alla "scripts"sezione:

"scripts": {
  "test:math": "jest -i test/my-tests.js -t \"math tests\"",
}

In questo caso, usiamo un alias 'jest'invece di scriverne l'intero percorso. Inoltre, non specifichiamo il percorso del file di configurazione poiché possiamo posizionarlo "package.json"e Jest lo esaminerà per impostazione predefinita. Ora puoi eseguire il comando:

npm run test:math

e "math tests"verrà eseguito il blocco con due test. Oppure, ovviamente, puoi specificare un test in particolare con il suo nome.

Un'altra opzione sarebbe quella di estrarre il <the-name-of-test-block>parametro fuori dallo "test:math"script e passarlo dal comando NPM:

package.json:

"scripts": {
  "test:math": "jest -i test/my-tests.js -t",
}

Comando:

npm run test:math "math tests"

Ora puoi gestire il nome dei test di esecuzione con un comando molto più breve.

Osservazioni:

  1. Il 'jest'comando funzionerà con gli script NPM perché

    npm rende "./node_modules/.bin"la prima voce nella PATHvariabile d'ambiente quando si esegue uno script del ciclo di vita, quindi funzionerà bene, anche se il programma non è installato a livello globale ( blog NPM )

  2. Questo approccio non sembra consentire il debug perché Jest viene eseguito tramite il suo binario / CLI , non tramite node.

Esecuzione del test Jest selezionato in Visual Studio Code

Se stai usando Visual Studio Code puoi sfruttarlo ed eseguire il test attualmente selezionato (nell'editor del codice) premendo il F5pulsante. Per fare ciò avremo bisogno di creare un nuovo blocco di configurazione di avvio nel ".vscode/launch.json"file. In quella configurazione, useremo variabili predefinite che vengono sostituite con i valori appropriati (purtroppo non sempre ) durante l'esecuzione. Di tutti i disponibili siamo interessati solo a questi:

  • ${relativeFile} - il file aperto corrente relativo a ${workspaceFolder}
  • ${selectedText} - il testo attualmente selezionato nel file attivo

Ma prima di scrivere launch config dovremmo aggiungere lo 'test'script nel nostro 'package.json'(se non lo abbiamo ancora).

package.json:

"scripts": {
  "test": "jest"
}

allora possiamo usarlo nella nostra configurazione di lancio.

Avvia configurazione:

{
  "type": "node",
  "request": "launch",
  "name": "Run selected Jest test",
  "runtimeExecutable": "npm",
  "runtimeArgs": [
    "run-script",
    "test"
  ],
  "args": [
    "--",
    "-i",
    "${relativeFile}",
    "-t",
    "${selectedText}"
  ],
  "console": "integratedTerminal",
}

in realtà fa lo stesso dei comandi descritti in precedenza in questa risposta. Ora che tutto è pronto, possiamo eseguire qualsiasi test desideriamo senza dover riscrivere manualmente i parametri del comando.

Ecco tutto ciò che devi fare:

  1. Seleziona la configurazione di avvio attualmente creata nel pannello di debug:

selezionare avvia config nel pannello di debug VSCode

  1. Apri il file con i test nell'editor di codice e seleziona il nome del test che vuoi testare (senza virgolette):

seleziona il nome del test

  1. Premere il 'F5'pulsante.

E voilà!

Ora per eseguire qualsiasi test desiderato basta aprirlo nell'editor, selezionare il suo nome e premere F5.

Sfortunatamente, non sarà "voilà" sui computer Windows perché sostituiscono (chissà perché) la ${relativeFile}variabile con il percorso con barre rovesciate e Jest non capirà un tale percorso.

Osservazioni:

  1. Per eseguire il debugger non dimenticare di aggiungere il '--inspect-brk'parametro.
  2. In questo esempio di configurazione, non abbiamo il parametro di configurazione Jest supponendo che sia incluso in 'package.json'.

1
Eccellente! Questa dovrebbe essere la risposta accettata. Soprattutto se aggiunge una menzione npxper semplificare notevolmente la chiamata a Jest, indipendentemente dal sistema operativo.
Dan Dascalescu il

19

Puoi anche utilizzare fo xper focalizzare o escludere un test. Per esempio

fit('only this test will run', () => {
   expect(true).toBe(false);
});

it('this test will not run', () => {
   expect(true).toBe(false);
});

xit('this test will be ignored', () => {
   expect(true).toBe(false);
});

1
Non sono sicuro del motivo per cui questa risposta è stata sottoposta a downgrade, sembra rispondere alla domanda e funziona.
mbillard,

1
xitha funzionato per me, ma fitnon lo fa. sto usando jest@22.4.4.
Hinrich,

fitfunziona in jest@23.1.0 per me.
jcubic,

Penso che il principale svantaggio di questo approccio sia che, se stai solo cercando di eseguire il drill down su un test per correggere un bug, comporta modifiche non necessarie ai file di test sottostanti. Se, per qualsiasi motivo, desideri mantenere il codice di test (attraverso commit, diciamo), questo potrebbe avere senso.
webelo,

ffunziona solo all'interno di un file.
Sergey

14

Come detto sopra, puoi eseguire il comando

jest -t 'fix-order-test'

Se hai l' itinterno di un describeblocco, devi correre

jest -t '<describeString> <itString>'

13

Se si jestesegue come comando di script, qualcosa del genere npm test, è necessario utilizzare il comando seguente per farlo funzionare:

npm test -- -t "fix order test"

8

con l' ultima versione jest , è possibile utilizzare uno dei seguenti per eseguire un solo test, lo stesso per la suite di test.

it.only('test 1', () => {})

test.only('test 1', () => {})

fit('test 1', () => {})

jest 'test 1' potrebbe funzionare anche se il nome del test è univoco.


4

In VS Code, questo mi consente di eseguire / eseguire il debug solo 1 test Jest, con punti di interruzione: https://github.com/Microsoft/vscode-recipes/tree/master/debugging-jest-tests

Il mio launch.jsonha questo dentro:

{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "node",
      "request": "launch",
      "name": "Jest All",
      "program": "${workspaceFolder}/node_modules/.bin/jest",
      "args": ["--runInBand"],
      "console": "integratedTerminal",
      "internalConsoleOptions": "neverOpen",
      "windows": {
        "program": "${workspaceFolder}/node_modules/jest/bin/jest",
      }
    },
    {
      "type": "node",
      "request": "launch",
      "name": "Jest Current File",
      "program": "${workspaceFolder}/node_modules/.bin/jest",
      "args": ["${relativeFile}"],
      "console": "integratedTerminal",
      "internalConsoleOptions": "neverOpen",
      "windows": {
        "program": "${workspaceFolder}/node_modules/jest/bin/jest",
      }
    }
  ]
}

e questo in package.json:

  "scripts": {
    "test": "jest"
  }
  • Per eseguire 1 test, in quel test, cambia test(o it) in test.only(o it.only). Per eseguire 1 suite di test (diversi test), passare describea describe.only.
  • Se lo desideri, imposta i punti di interruzione.
  • In VS Code, vai a Debug View (Shift + Cmd + D).
  • Dal menu a discesa in alto, seleziona Jest Current File .
  • Fare clic sulla freccia verde per eseguire quel test.

Nel mio caso, la tua configurazione esegue solo un test (con it.only (...)), ma non si ferma ai punti di interruzione :(
Tudor Leustean,

Ottenere JavaScript per raggiungere i punti di interruzione in un debugger può essere complicato, a causa della sua natura asincrona. In VS Code, gioca con dove posizioni i tuoi punti di interruzione, più i comandi nel menu Debug, fino a quando non li colpisce. Se continua a saltare i punti di interruzione, inseriscili PRIMA nel tuo codice. Se 1 file chiama una funzione in un altro file, posizionare il punto di interruzione in quella chiamata di funzione, quindi "Passa a" la chiamata per saltare i file. Gioca con questi comandi di debug: "Step Over, Step Into, Step Out, Continue"
Raymond Gan,

In realtà, non è necessario "scripts": { "test": "jest" }in package.jsonperché hai specificato il percorso completo nel "program"parametro in launch.json.
Sergey,

4

solo un piccolo componente aggiuntivo, perché sembra che ci sia stata una specie di combattimento se usare ./node_modules/.bin/jest -i ...o semplicemente jest -i ...onpm test -- -i ...

  1. solo chiamare jestfunziona se lo hai installato a livello globale (come con npm install -g jest), un modo non molto pulito di gestire le dipendenze
  2. se jest è installato solo localmente nel pacchetto e si desidera chiamare lo script jest senza la deviazione dello script npm, è possibile utilizzare npx jest -i ...=> questo è esattamente lo scopo di npx. ti salva dalla scrittura./node_modules/.bin/...

3

Ecco la mia opinione:

./node_modules/.bin/jest --config test/jest-unit-config.json --runInBand src/components/OpenForm/OpenForm.spec.js -t 'show expanded'

Appunti:

  • ./node_modules/.bin/...è un modo meraviglioso per accedere al binario jest (o mocha o ...) installato localmente fornito con il pacchetto installato localmente. (sì, nei tuoi script npm non puoi fare jestnulla prima, ma questo è utile sulla riga di comando ... (è anche un buon inizio per la tua configurazione di debug, qualunque IDE stai usando ...)
  • il tuo progetto potrebbe non avere un set di opzioni di configurazione. Ma se lo fa (sbirciare gli script in package.json), questo è quello che ti serve.
  • --runInBand - come detto, non conoscere la tua configurazione, ma se ti concentri sullo sviluppo / correzione di un singolo test, preferisci non avere a che fare con i web worker ...
  • Sì, puoi fornire l'intero percorso esplicito al tuo file
  • opzionalmente , puoi usare -tnon per eseguire tutti i test in quel file ma solo uno (qui: quello, che ha qualcosa con ' show expanded' nel suo nome). Lo stesso effetto può essere ottenuto incollando .only()quel file.

0

Ora c'è un bel plugin jest per questo chiamato jest-watch-typeaheadche rende questo processo molto più semplice.


0
npm run test -- test-name

Funzionerà solo se il nome della specifica del test è univoco. Il codice sopra farebbe riferimento

un file con questo nome: test-name.component.spec.ts

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.