¿Cómo ejecutar las pruebas de Jest secuencialmente?


141

Estoy ejecutando pruebas de Jest vía npm test. Jest ejecuta pruebas en paralelo de forma predeterminada. ¿Hay alguna forma de hacer que las pruebas se ejecuten secuencialmente?

Tengo algunas pruebas que llaman a código de terceros que se basa en cambiar el directorio de trabajo actual.

Respuestas:


221

Las opciones de CLI están documentadas y también son accesibles ejecutando el comando jest --help.

Verá la opción que está buscando: --runInBand.


55
¡Muchas gracias! Es npm test --runInBand? Offtopic: No estoy seguro de dónde viene el nombre "banda". --runSequentially probablemente tendría más sentido :)
Martin Konicek

13
@MartinKonicek npm test -- --runInBandes correcto.
Ondrej Slinták

40
Desafortunadamente, el hecho de que la orden de ejecución no se pueda controlar hace que Jest sea bastante inútil para las pruebas de integración.
Evan B.

19
@Evan El hecho de que necesites que tus pruebas se ejecuten en cierto orden es un olor.
Nico Van Belle

18
@NicoVanBelle Es simplemente el precio que paga por las verdaderas pruebas de extremo a extremo de sistemas con estado suficientemente complejos. Estoy abierto a alternativas, pero aún no he visto una solución que no implique intercambiar ingenuamente partes clave de la pila o restablecimientos prohibitivos de la base de datos entre pruebas. No significa que Jest sea una mala herramienta, solo la incorrecta para este tipo particular de prueba.
Evan B.

17

Todavía me estoy familiarizando con Jest, pero parece que los bloques de descripción se ejecutan sincrónicamente, mientras que los bloques de prueba se ejecutan de forma asincrónica. Estoy ejecutando múltiples bloques de descripción dentro de una descripción externa que se parece a esto:

describe
    describe
        test1
        test2

    describe
        test3

En este caso, test3no se ejecuta hasta que test2se completa porque test3está en un bloque de descripción que sigue al bloque de descripción que contiene test2.


1
Tal vez todavía se ejecutará en paralelo.
LCB

Esto es genial. Hace posible verificar primero el comportamiento con las variables de entorno que faltan, luego establecer las variables y hacer más pruebas.
Ataque

14

Funcionó para mí asegurando la ejecución secuencial de pruebas bien separadas para módulos:

1) Mantenga las pruebas en archivos separados, pero sin spec/testnombrarlos.

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

2) El archivo con el conjunto de pruebas también debería tener este aspecto (testSuite1.js):

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

3) Importarlos testToRunSequentially.test.jsy ejecutarlos con --runInBand:

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

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

No necesita ejecutar con --runInBand ya que ya tiene dos suites de prueba. Los conjuntos de pruebas secundarias se ejecutan en secuencia.
RICKY KUMAR

10

Utilice el corredor de prueba en serie:

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

Configure jest para usarlo, por ejemplo, en jest.config.js:

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

Puede usar la función de proyecto para aplicarla solo a un subconjunto de pruebas. Ver https://jestjs.io/docs/en/configuration#projects-arraystring--projectconfig


Puede usar la función de proyecto para usarla solo para un subconjunto de pruebas. , ¿Cómo?
Nux

1
@Nux La configuración de configuración de 'proyectos' en Jest le permite aplicar otras configuraciones de configuración selectivamente a conjuntos específicos de pruebas. Respuesta actualizada con enlace a documentos y ejemplo.
Joachim Lous

4

Copiado de 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', () => {}});
}
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.