Як послідовно запускати тести Jest?


140

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

У мене є кілька тестів, що викликають сторонній код, який залежить від зміни поточної робочої директорії.

Відповіді:


220

Параметри CLI задокументовані, а також доступні, виконавши команду jest --help.

Ви побачите опцію , яку ви шукаєте: --runInBand.


5
Дуже дякую! Це npm test --runInBand? Offtopic: Не впевнений, звідки походить назва "band". --runSequentially, мабуть, матиме більше сенсу :)
Мартін Конічек

13
@MartinKonicek npm test -- --runInBandвірно.
Ondrej Slinták

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, оскільки у вас вже є два тестових набору. Комплекти дитячих тестів виконуються послідовно.
RICKY KUMAR

10

Використовуйте серійний тестовий бігун:

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

Налаштуйте жарт, щоб використовувати його, наприклад, у vice.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.