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.