Как запустить Jest тесты последовательно?

141

Я запускаю тесты Jest через npm test. Jest запускает тесты параллельно по умолчанию. Есть ли способ заставить тесты запускаться последовательно?

У меня есть несколько тестов, вызывающих сторонний код, который зависит от изменения текущего рабочего каталога.

Мартин Коничек
источник

Ответы:

221

Параметры CLI документируются и также доступны при запуске команды jest --help.

Вы увидите опцию , которую вы ищете: --runInBand.

ncuillery
источник
5
Большое спасибо! Это npm test --runInBand? Оффтоп: Не уверен, откуда происходит название «группа». --Run последовательно, вероятно, имело бы больше смысла :)
Martin Konicek
13
@MartinKonicek npm test -- --runInBandправильно.
Ондрей Слинтак
40
К сожалению, тот факт, что порядок выполнения не может контролироваться, делает Jest практически бесполезным для интеграционных тестов.
Эван Б.
19
@Evan То, что вам нужны тесты в определенном порядке, - это запах.
Нико Ван Белл
18
@NicoVanBelle Это просто цена, которую вы платите за истинное сквозное тестирование достаточно сложных систем с состоянием. Я открыт для альтернатив, но мне еще предстоит найти решение, которое не включает в себя наивное переключение между ключевыми частями стека или чрезмерно медленный сброс базы данных между тестами. Это не значит, что Jest - плохой инструмент, просто он не подходит для такого теста.
Эван Б.
17

Я все еще знакомлюсь с Jest, но похоже, что описательные блоки работают синхронно, тогда как тестовые блоки работают асинхронно. Я запускаю несколько блоков описаний внутри внешнего описания, которое выглядит примерно так:

describe
    describe
        test1
        test2

    describe
        test3

В этом случае test3не выполняется, пока test2не завершится, потому что test3находится в блоке описания, который следует за блоком описания, который содержит test2.

SuperCodeBrah
источник
1
Возможно, он все еще будет работать параллельно.
LCB
Это круто. Позволяет сначала проверить поведение с отсутствующими переменными среды, затем установить переменные и выполнить дальнейшие тесты.
Attaque
14

Это сработало для меня, обеспечив последовательный запуск хорошо разделенных на модули тестов:

1) Хранить тесты в отдельных файлах, но без spec/testименования.

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

2) Файл с набором тестов также должен выглядеть следующим образом (testSuite1.js):

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

3) Импортируйте их testToRunSequentially.test.jsи выполните с --runInBand:

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

describe('sequentially run tests', () => {
   testSuite1()
   testSuite2()
})
kmnowak
источник
Вам не нужно работать с --runInBand, так как у вас уже есть два набора тестов. Наборы Child Test выполнены в последовательности.
Рики Кумар
10

Используйте серийный тестовый бегун:

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

Настройте jest, чтобы использовать его, например, в jest.config.js:

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

Вы можете использовать функцию проекта, чтобы применить ее только к подмножеству тестов. См. Https://jestjs.io/docs/en/configuration#projects-arraystring--projectconfig

Иоахим Лус
источник
Вы можете использовать функцию проекта, чтобы использовать ее только для подмножества тестов. , Как?
Nux
1
@Nux Параметр конфигурации «проекты» в Jest позволяет выборочно применять другие параметры конфигурации к определенным наборам тестов. Ответ обновлен со ссылкой на документы и пример.
Иоахим Лус
4

Как скопировано с 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', () => {}});
}
Мор Шемеш
источник