История
Будущее
Начнем с истории
Что такое покрытие кода? 🤔
Покрытие кода предоставляет информацию о том, выполнялись ли определенные части приложения и, при необходимости, как часто. Он обычно используется для определения того, насколько тщательно набор тестов проверяет конкретную кодовую базу
Зачем это вообще нужно при разработке программного обеспечения?
- Если вас интересует качество вашего набора тестов или рефакторинг крупного устаревшего проекта. Покрытие кода может показать вам, какие именно части вашей кодовой базы покрыты.
- Если вы хотите быстро показать, что определенная часть кодовой базы достигнута. Вместо использования console.log для отладки в стиле printf или ручного пошагового выполнения кода покрытие кода может отображать оперативную информацию о том, какие части ваших приложений были выполнены.
- Или, может быть, вы оптимизируете скорость и хотели бы знать, на каких местах сосредоточиться? Счетчики выполнения могут указывать на горячие функции и циклы.
Как рассчитывается покрытие кода? 🤓
Традиционный способ расчета покрытия — вставка счетчиков в исходный код.
Вот как такие инструменты, как Istanbul и Blanket, обрабатывают исходный код.
Вместо оснащения исходного кода счетчиками V8 добавляет счетчики к байт-коду, сгенерированному из исходного кода.
Как получить покрытие кода непосредственно из V8
Ну, я скажу, что команда Node.js сделала это довольно просто. Все, что нам нужно сделать, это установить переменную среды NODE_V8_COVERAGE, и Node.js начнет выводить покрытие в каталог, указанный в качестве аргумента.
Это создаст файл JSON в каталоге покрытия.
Покрытие выводится в виде массива объектов ScriptCoverage:
Чтобы сделать удобочитаемый отчет, вы можете использовать c8,
Это создаст отчет в формате HTML.
ТАДА! у нас есть покрытие прямо с двигателя V8.😊
Наконец, давайте разберемся с обоснованием этого поста. В современном мире такие инструменты, как Стамбул, способны добиться того же, тогда зачем нужно нативное решение. Подход с транспиляцией имеет несколько недостатков (упомянутых Бенджамином Коу).
- Им нужно идти в ногу с развивающимся языком JavaScript и иногда отставать в языковых функциях; вот запрос на добавление синтаксиса распространения объектов в Стамбул от сентября 2017 года, через несколько месяцев после того, как функция стала широко доступна.
- Внедрение счетчиков в каждую строку приложения значительно влияет на производительность (собственный набор тестов Node.js работает примерно на 300% медленнее при использовании инструментов).
- Сложно вставить счетчики в кодовую базу, не случайно изменив их поведение.
Демонстрацию можно найти на https://github.com/kuldeepkeshwar/code-coverage-from-v8-demo.
Спасибо, что прочитали эту статью. Давайте продолжим работу с Twitter и Github.