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


141

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

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

Ответы:


221

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

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


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.


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()
})

Вам не нужно работать с --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 позволяет выборочно применять другие параметры конфигурации к определенным наборам тестов. Ответ обновлен со ссылкой на документы и пример.
Иоахим Лус

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.