Como executar testes Jest sequencialmente?


141

Estou executando testes Jest via npm test. Jest executa testes em paralelo por padrão. Existe alguma maneira de executar os testes sequencialmente?

Eu tenho alguns testes chamando código de terceiros que depende da alteração do diretório de trabalho atual.

Respostas:


221

Opções CLI são documentados e também acessível através da execução do comando jest --help.

Você verá a opção que você está procurando: --runInBand.


5
Muito obrigado! É isso npm test --runInBand? Offtopic: não sei de onde vem o nome "band". --runSequentially provavelmente faria mais sentido :) #
Martin Konicek

13
@MartinKonicek npm test -- --runInBandestá correto.
Ondrej Slinták 22/02

40
Infelizmente, o fato de a ordem de execução não poder ser controlada torna o Jest praticamente inútil para testes de integração.
Evan B.

19
@ Evan O fato de você precisar realizar seus testes em uma determinada ordem é um cheiro.
Nico Van Belle

18
@NicoVanBelle É simplesmente o preço que você paga por um verdadeiro teste de ponta a ponta de sistemas stateful suficientemente complexos. Estou aberto a alternativas, mas ainda não vi uma solução que não envolva trocar ingenuamente partes importantes da pilha ou proibir redefinições proibitivamente lentas do banco de dados entre testes. Não significa que o Jest seja uma ferramenta ruim, apenas a errada para esse tipo de teste em particular.
Evan B.

17

Ainda estou me familiarizando com o Jest, mas parece que os blocos de descrição são executados de forma síncrona, enquanto os blocos de teste são executados de forma assíncrona. Estou executando vários blocos de descrição dentro de uma descrição externa que se parece com isso:

describe
    describe
        test1
        test2

    describe
        test3

Nesse caso, test3não é executado até que test2esteja completo porque test3está em um bloco de descrição que segue o bloco de descrição que contém test2.


1
Talvez ainda funcione em paralelo.
LCB

Isso é ótimo. Torna possível verificar primeiro o comportamento com variáveis ​​de ambiente ausentes, depois definir as variáveis ​​e fazer testes adicionais.
Attaque

14

Ele trabalhou para mim, garantindo a execução sequencial de testes bem separados para módulos:

1) Mantenha os testes em arquivos separados, mas sem spec/testnomear.

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

2) O arquivo com o conjunto de testes também deve ter a seguinte aparência (testSuite1.js):

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

3) Importe-os para testToRunSequentially.test.jse execute com --runInBand:

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

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

Você não precisa executar com --runInBand, pois você já possui dois conjuntos de testes. Os conjuntos de testes filhos são executados em sequência.
RICKY KUMAR

10

Use o corredor de teste serial:

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

Configure o jest para usá-lo, por exemplo, em jest.config.js:

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

Você pode usar o recurso de projeto para aplicá-lo apenas a um subconjunto de testes. Consulte https://jestjs.io/docs/en/configuration#projects-arraystring--projectconfig


Você pode usar o recurso de projeto para usá-lo apenas em um subconjunto de testes. , Como?
Nux

1
@Nux A configuração de 'projetos' no Jest permite aplicar outras configurações de forma seletiva a conjuntos de testes específicos. Resposta atualizada com link para documentos e exemplo.
Joachim Lous

4

Como 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', () => {}});
}
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.