Jest очистку после всех тестов

Можно ли в Jest запускать задачи очистки или разрыва, которые запускаются после завершения всех других тестов? Подобно тому, как setupFiles позволяет настраивать задачи после выполнения любого теста. Бонусные очки, если это также может выполняться независимо от того, были ли у теста какие-либо ошибки.

Помещение afterAll(() => {}) на верхний уровень файла (вне любой функции описания) появляется только для запуска после завершения тестов из этого конкретного файла.

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

Ответ 1

Есть родственный хук к setupFiles, который будет срабатывать перед каждым набором тестов, но сразу после того, как ваш инициатор тестов (по умолчанию Jasmine2) инициализирует глобальную среду.

Он называется setupTestFrameworkScriptFile и принимает в качестве параметра строку, а не массив, как в setupFiles.

Используйте это так:

{
    "setupTestFrameworkScriptFile": "<rootDir>/setup.js"
}

Пример setup.js:

beforeAll(() => console.log('beforeAll'));
afterAll(() => console.log('afterAll'));

setup.js не нужно ничего экспортировать. Он будет выполняться перед каждым набором тестов (каждым тестовым файлом). Поскольку тестовый инициатор уже инициализирован, глобальные функции, такие как beforeAll и afterAll, находятся в области действия так же, как и в вашем обычном тестовом файле, поэтому вы можете вызывать их как хотите.

setupTestFrameworkScriptFile firing beforeAll and afterAll

Ответ 2

Похоже, есть функция под названием reporter, которая делает именно это:

Ответ 3

В jest.config.js:

module.exports = {
    // ...
    setupFilesAfterEnv: [
        "./test/setup.js",
        // can have more setup files here
    ],
}

В ./test/setup.js:

afterAll(() => {
    // Cleanup logic
});

Примечание: