Come testare un singolo file usando Jest?


360

Sono in grado di testare più file utilizzando Jest, ma non riesco a capire come testare un singolo file.

Io ho:

  • Correre npm install jest-cli --save-dev
  • Aggiornato package.json: `{..." scripts ": {" test ":" jest "} ...}
  • Scritto un numero di test.

L'esecuzione npm testfunziona come previsto (attualmente esegue 14 test).

Come testare un singolo file, ad esempio test app/foo/__tests__/bar.spec.js?

Ho provato a correre npm test app/foo/__tests__/bar.spec.js(dalla radice del progetto), ma ricevo il seguente errore:

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

Grazie

Risposte:


298

Per eseguire un test specifico, è necessario utilizzare il jestcomando. npm testnon funzionerà. Per accedere jestdirettamente dalla riga di comando, installarlo tramite npm i -g jest-clio yarn global add jest-cli.

Quindi esegui semplicemente il tuo test specifico con jest bar.spec.js.

Nota : non è necessario inserire il percorso completo del file di test. L'argomento viene interpretato come regexp. È sufficiente qualsiasi parte del percorso completo che identifichi in modo univoco un file.


5
Purtroppo questo non funziona per me. Correre jest bar.spec.jsjest: command not found. Ho confermato che Jest è installato ( npm list -g jestmostra jest@0.1.37). FWIW, quando corro usando npm testlo usa jest-cli.
Musket,

4
Sì, jest-cliè il modulo giusto, installalo a livello globale npm install -g jest-cli. jestin npm è ... qualcos'altro
ncuillery,

56
Non è corretto Il funzionamento di npm test non significa che jest sia installato a livello globale. Significa solo che jest è installato nel tuo progetto.
Chiedo,

20
Come ha detto @ChiedoJohn. Per eseguirlo senza installarlo a livello globale, puoi eseguirlo dalla radice della tua app:node_modules/.bin/jest args
Eddie Monge Jr

3
Se stai usando la configurazione predefinita del gelsomino puoi focalizzare un singolo test usando fitinvece di it.
eremzeit,

380

Tutto quello che devi fare è recitare l'incantesimo di magia:

npm test -- SomeTestFileToRun

Lo standalone --è * nix magico per contrassegnare la fine delle opzioni, il che significa (per NPM) che tutto ciò che viene passato al comando in esecuzione, in questo caso jest. A parte, puoi visualizzare le note sull'uso dei jest dicendo

npm test -- --help

Comunque, cantando

npm test -- Foo

esegue i test nel file denominato ( FooBar.js). Dovresti notare, tuttavia, che:

  • Jest tratta il nome con distinzione tra maiuscole e minuscole, quindi se si utilizza un file system senza distinzione tra maiuscole e minuscole, ma che preserva le maiuscole (come Windows NTFS), è possibile riscontrare ciò che sembra essere strano.

  • Jest sembra trattare la specifica come un prefisso.

Quindi l'incantesimo sopra sarà

  • Corri FooBar.js, Foo.jseFooZilla.js
  • Ma NON correre foo.js

Grazie, purtroppo ottengo lo stesso errore quando eseguo questo:npm ERR! Error: ENOENT, open '<path to project>/node_modules/<name of file>/package.json'
Musket

1
esiste un metodo alternativo per eseguire i test jest oltre alla riga di comando ?? , come se avessi fatto una richiesta post al mio progetto esistente, api's mi avrebbe dato il problema del token CSRF. Come configuro il jest test sul mio progetto esistente ?? in modo che inizi a servire la richiesta usando '/ rest-api' invece di ' localhost: 8000 / rest-api '
Suyog Sawant

@SuyogSawant: non è un commento. è una domanda a sé stante. Dovresti chiederlo qui su StackOverflow.
Nicholas Carey,

1
nel mio caso semplice ha npm test ToDoForm.test.jsfunzionato mentre jest ToDoForm.test.jsno
Tomasz Mularczyk il

il secondo punto sulla distinzione tra maiuscole e minuscole non corrisponde all'incantesimo fornito in precedenza.
NSjonas,

38

Per eseguire test individuali:

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

-t- dopo aver inserito un regex contenente il nome del test.


1
Eccezionale! Ha funzionato alla grande!
Flavio,

21

L'uso npm testnon significa che jest sia installato a livello globale. Significa solo che "test" è associato all'uso di jest in package.json

Quanto segue è ciò che ha funzionato per me, a livello di radice del progetto:

node_modules/.bin/jest [args]

args può essere il file di test che si desidera eseguire o la directory contenente più file.


Ha funzionato per me;)
wogsland il

1
Grazie! questo è stato molto utile per me!
Isaac,

5
una scorciatoia per eseguire i binari node_modules/.binè usare il npxcomando. Ad esempionpx jest [args]
Sergio Mazzoleni il

16

se lo usi yarnpuoi aggiungere il file .spec.jso .test.jsdirettamente dopo:

yarn test src/lib/myfile.test.js

Questa è la parte dal mio package.jsoncon jest install come pacchetto locale (rimosse le parti pertinenti):

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

}


6

Se sei in esecuzione npm >= 5.2.0e hai installato jest localmente come devDependenciescon npm i -d jestpuoi eseguire jest su un determinato file facendonpx jest /path/to/your/spec.js


5

Stiamo usando nrwl-nx con angolare . In questo caso possiamo usare questo comando:

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

Appunti:

  • npm testeseguirà lo script di test specificato in package.json: "test:client": "ng test client"
  • quindi il resto del cmd verrà passato al test ng
    • <ng-project> è il nome di un progetto in angular.json
      • quando si omette questo parametro verrà utilizzato "defaultProject"(specificato in angular.json) (quindi è necessario specificarlo, quando il test non è nel progetto predefinito)
    • successivamente dobbiamo verificare quale costruttore viene utilizzato:
      • per angular.jsonnavigare verso "project"- "<ng-project>"- "architect"-"test"
      • e controlla il "builder", che nel nostro caso è:"@nrwl/jest:jest"
    • ora che conosciamo il builder, dobbiamo trovare i parametri disponibili della linea cmd
      • sulla riga di comando, eseguire npm test server -- --helpper vedere tutte le opzioni disponibili
      • oppure controlla i documenti online
    • una delle opzioni --testFileè quella utilizzata qui

Questo è quello che l'ha fatto per me perché stiamo usando nx. Grazie.
user906573

4

Questo è il modo in cui eseguo dinamicamente test su file specifici senza riavviare il test. Il mio progetto di reazione è stato creato eracreate-react-app

quindi osserva il test delle modifiche, eseguendo automaticamente il test quando apporto le modifiche.

Quindi questo è quello che vedo alla fine dei risultati del test sul terminale.

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.

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

quindi premere 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.

questo dopo aver voluto eseguire il file 'index.es6.js' nella cartella '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

Ecco come eseguo i test su file specifici.



1

Ho appena installato jest a livello globale e poi jest myFileToTest.spec.jsho funzionato


1

Hai due opzioni:

  • Opzione 1: riga di comando. È possibile eseguire il comando seguente
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'

Questo evita di installare Jest a livello globale. Usi il jest usato dal tuo progetto.

  • Opzione 2: se stai usando VS Code hai un ottimo plugin per farlo: Jest Runner . Ti consente non solo di eseguire test file per file, ma anche Suite e specifiche specifiche semplicemente facendo clic con il pulsante destro del mouse sui test che desideri eseguire.

0

Jest utilizzerà ciò che passi come modello regex . Che corrisponderà per.

Se si desidera eseguire un file di test specifico. Quindi il modo migliore per farlo è quello di precisare l'intero percorso. (Puoi troppo preciso un certo percorso relativo come (src / XFolder / index.spec.ts)).

Il modo più semplice per fornire il percorso completo nella directory e in Linux è:

jest $PWD/index.spec.ts

Nota l'uso della variabile $ PWD .

inserisci qui la descrizione dell'immagine

Per windows! (da aggiornare)


0

Con Angular e Jest puoi aggiungerlo a package.json sotto "script"

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

Quindi per eseguire unit test per file specifici è possibile scrivere questo comando nel proprio terminale

npm run test:debug modules/myModule/someTest.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.