Как помешать Mocha сохранить требуемый кеш между тестовыми файлами? - PullRequest
0 голосов
/ 18 марта 2020

Я запускаю свои интеграционные тесты в отдельных файлах для каждого API.

Прежде чем начать, я запускаю сервер вместе со всеми службами, такими как базы данных. Когда это заканчивается, я закрываю все соединения. Для этой цели я использую Before и After крючки. Важно знать, что мое приложение зависит от корпоративной среды, в которой написана основная «основная работа», и я устанавливаю ее как зависимость от моего приложения.

Я запускаю тесты с Mocha.

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

Отладка Я обнаружил, что Mocha сначала загружает все файлы, это означает, что весь код, написанный до перехватов и вызовов describe, выполняется. Поэтому, когда второй файл загружен, require.cache уже заполнен модулями. Только после этого пакет выполняет тесты последовательно.

Это имеет огромное влияние в этой среде, поскольку многие объекты на самом деле являются синглетонами, поэтому, если в хуке after он закрывает соединение с базой данных, он закрывает связь внутри синглтона. То, как был построен Framework, очень затрудняет решение этой проблемы, например, повторное подключение ко всем службам в хуке before.

Я написал очень уродливый код, который помогает мне, прежде чем я смогу провести рефакторинг Framework. Это относится к каждому тестовому файлу, который я хочу сделать недействительным в кеше.

function clearRequireCache() {
    Object.keys(require.cache).forEach(function (key) {
        delete require.cache[key];
    });
}

before(() => {
    clearRequireCache();
})

Это работает, но, похоже, очень плохая практика. И я не хочу, чтобы это было в коде.

В качестве второй идеи я думал о запуске Mocha несколько раз, по одному для каждого "модуля" (как в моем Framework) или файла.

"scripts": {
   "test-integration" : "./node_modules/mocha/bin/mocha ./api/modules/module1/test/integration/*.integration.js && ./node_modules/mocha/bin/mocha ./api/modules/module2/test/integration/file1.integration.js && ./node_modules/mocha/bin/mocha ./api/modules/module2/test/integration/file2.integration.js"
}

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

...