Сбор отчетов покрытия в Jest с интеграционными тестами - PullRequest
1 голос
/ 28 октября 2019

У меня есть куча тестов с Jest, которые тестируют конечные точки сервера Express в одном репо. Чтобы выполнить это тестирование, у меня есть Jest, который раскручивает сервер Express в методе beforeAll(). Когда я запускаю Jest с флагом --coverage, я получаю информацию о покрытии только тех сценариев, которые были запущены для запуска Jest, и не сообщаю о сценариях, которые были вызваны попаданием в конечные точки. Это имеет смысл, но есть ли способ получить информацию о покрытии по коду конечной точки?

Фрагмент кода теста:

const rp = require('request-promise')

describe('testFunctions', () => {
    beforeAll(done => {
        app.listen(config.PORT, async () => {
            done()
        })
    })
    it('hit endpoint', async () => {
        const response = await rp({ uri: '/testFunctions', method: 'POST' })
        expect(response).toEqual('response)
    })
})

Я пытаюсь получить отчет о покрытии для всехсерверный код попал в запрос /testFunctions.

1 Ответ

0 голосов
/ 31 октября 2019

Это решение, которое сработало для меня. Это потребовало небольшого количества рефакторинга, но я думаю, что это было чище в конце. В моей экосистеме мы используем Parse Server в качестве промежуточного программного обеспечения с сервером Express, но это может относиться к любому, кому нужно запустить отдельный сервер с тестами.

Таким образом, чтобы мой сервер находился в месте, которое nyc (используемый мной инструмент отчетов о покрытии) мог отслеживать, я полностью абстрагировал инициализацию сервера из набора jest test и создал специальный скрипт npm для запуска его в совершенно отдельном процессе.

Сценарий NPM(package.json):

"scripts": {
    "coverage": "nyc --silent npm start & ./listen_on_port_5000.sh && jest test/cloud/integration && kill $(lsof -t -i tcp:5000) && nyc report --reporter=html",
}

listen_on_port_5000.sh

while ! nc -z localhost 5000
do
    sleep 0.5
done

Так как же это работает?

  1. nyc --silent npm start работает, что является нормальнымКоманда, которую мы запустим, чтобы запустить наш сервер с Express и Parse, но с добавленной частью nyc с флагом --silent, чтобы nyc мог работать в фоновом режиме и наблюдать за кодом сервера.
  2. Поскольку мы знаем, чтосервер всегда запускается через порт 5000, мы запускаем сценарий start в фоновом режиме и запускаем отдельный процесс, запускающий сценарий оболочки (listen_on_port_5000.sh), чтобы дождаться загрузки сервера.
  3. Как только сценарий прослушивателя обнаруживает, что что-либо работает на порту 5000, сценарий npm переходит к команде jest (все время, пока работает сервер Express).
  4. Когда Jest завершает работу,final скрипт запускает скрипт kill, чтобы закрыть сервер, работающий на порту 5000.
  5. Затем мы запускаем второй скрипт nyc, чтобы сгенерировать отчет, собранный в первом скрипте. Сгенерированный отчет можно найти в каталоге вашего проекта в /coverage/lcov-report/ (или вы можете использовать другой репортер покрытия .
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...