Come eseguire i test Jest in sequenza?


141

Sto eseguendo i test Jest tramite npm test. Jest esegue i test in parallelo per impostazione predefinita. Esiste un modo per eseguire i test in sequenza?

Ho alcuni test che chiamano codice di terze parti che si basa sulla modifica della directory di lavoro corrente.

Risposte:


221

Le opzioni della CLI sono documentate e accessibili anche eseguendo il comando jest --help.

Vedrete l'opzione che stai cercando: --runInBand.


5
Molte grazie! È vero npm test --runInBand? Offtopic: non sono sicuro da dove provenga il nome "band". - Probabilmente avrebbe più senso :)
Martin Konicek il

13
@MartinKonicek npm test -- --runInBandè corretto.
Ondrej Slinták,

40
Sfortunatamente, il fatto che l'ordine di esecuzione non possa essere controllato rende Jest praticamente inutile per i test di integrazione.
Evan B.

19
@Evan Il fatto che tu abbia bisogno di eseguire i test in un certo ordine è un odore.
Nico Van Belle,

18
@NicoVanBelle È semplicemente il prezzo da pagare per un vero test end-to-end di sistemi stateful sufficientemente complessi. Sono aperto alle alternative, ma devo ancora vedere una soluzione che non implichi né lo scambio ingenuo di parti chiave dello stack o rallentamenti proibitivi del database tra i test. Non significa che Jest sia uno strumento negativo, solo quello sbagliato per questo particolare tipo di test.
Evan B.

17

Sto ancora familiarizzando con Jest, ma sembra che descrivano i blocchi eseguiti in modo sincrono mentre i blocchi di test funzionano in modo asincrono. Sto eseguendo più blocchi descrittivi all'interno di una descrizione esterna che assomiglia a questo:

describe
    describe
        test1
        test2

    describe
        test3

In questo caso, test3non viene eseguito fino al test2completamento perché si test3trova in un blocco descrittivo che segue il blocco descrittivo che contiene test2.


1
Forse funzionerà ancora in parallelo.
LCB

Questo è fantastico Consente di verificare prima il comportamento con variabili d'ambiente mancanti, quindi impostare le variabili ed eseguire ulteriori test.
Attaque

14

Ha funzionato per me assicurando l'esecuzione sequenziale di test ben separati dai moduli:

1) Mantenere i test in file separati, ma senza spec/testdenominazione.

|__testsToRunSequentially.test.js
|__tests
   |__testSuite1.js
   |__testSuite2.js
   |__index.js

2) Anche il file con la suite di test dovrebbe apparire così (testSuite1.js):

export const testSuite1 = () => describe(/*your suite inside*/)

3) Importali testToRunSequentially.test.jsed eseguili con --runInBand:

import { testSuite1, testSuite2 } from './tests'

describe('sequentially run tests', () => {
   testSuite1()
   testSuite2()
})

Non è necessario eseguire con --runInBand poiché si hanno già due suite di test. Le Child Test Suite vengono eseguite in sequenza.
RICKY KUMAR,

10

Utilizzare il test runner seriale:

npm install jest-serial-runner --save-dev

Configurare jest per usarlo, ad esempio in jest.config.js:

module.exports = {
   ...,
   runner: 'jest-serial-runner'
};

È possibile utilizzare la funzionalità di progetto per applicarla solo a un sottoinsieme di test. Vedi https://jestjs.io/docs/en/configuration#projects-arraystring--projectconfig


È possibile utilizzare la funzionalità di progetto per utilizzarla solo per un sottoinsieme di test. , Come?
Nux

1
@Nux L'impostazione di configurazione dei 'progetti' in Jest consente di applicare selettivamente altre impostazioni di configurazione a specifici set di test. Risposta aggiornata con collegamento a documenti ed esempio.
Joachim Lous,

4

Come copiato da https://github.com/facebook/jest/issues/6194#issuecomment-419837314

test.spec.js

import { signuptests } from './signup'
import { logintests } from './login'

describe('Signup', signuptests)
describe('Login', logintests)

signup.js

export const signuptests = () => {
     it('Should have login elements', () => {});
     it('Should Signup', () => {}});
}

login.js

export const logintests = () => {
    it('Should Login', () => {}});
}
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.