Некоторое время назад я работал над интеграцией Jest в наш конвейер сборки, и одним из наших требований была поддержка TAP (Test Anything Protocol).

Это оказалось немного проблематичным с Jest, потому что Jest не поддерживает добавление пользовательских репортеров простым способом. Поскольку Jest использует Jasmine под капотом, я начал изучать возможности использования jasmine-репортеров, поддерживающих TAP.
Это было довольно легко запустить, мне нужно было только добавить эти три строки в файл setupTestFrameworkFile Jest.

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

Вернемся к исходной точке .. Моя вторая попытка заключалась в использовании флага командной строки --json. Но я довольно быстро понял, что это не сработает из-за 1): Jest распечатывает много информации, которая не в формате json, что затрудняет анализ. 2): вывод json, который он мне давал, был фактически отфильтрован таким образом, что он удалял информацию об отдельных it и test случаях.

А теперь ... моя последняя попытка ... это немного взломано, но выполняет свою работу. Итак, на этот раз я начал использовать параметр Jest testResultsProcessor, который в основном равен --json, но без какой-либо фильтрации. Таким образом, с помощью этого подхода я решил проблему с фильтрацией, но подробный вывод Jest все еще существует. Мое решение заключалось в том, чтобы вместо того, чтобы записывать результаты TAP в stdout, я вместо этого записал их в файл.

Однако по-прежнему оставались некоторые незначительные проблемы, такие как запись результатов TAP при локальном запуске тестов (требуется только в CI). Я решил это, проверив, установлен ли process.env.CI, и только потом обработал результаты. Теперь я считаю, что это можно решить, используя параметр командной строки, чтобы указать testResultsProcessor вместо того, чтобы устанавливать его в конфигурации.

Если кого-то интересует мой TAP-репортер, я включил его в суть:
Однако я уверен, что в нем отсутствуют некоторые функции TAP / он не на 100% совместим, но он работает для моего варианта использования.