История

Будущее

Начнем с истории

Что такое покрытие кода? 🤔

Покрытие кода предоставляет информацию о том, выполнялись ли определенные части приложения и, при необходимости, как часто. Он обычно используется для определения того, насколько тщательно набор тестов проверяет конкретную кодовую базу

Зачем это вообще нужно при разработке программного обеспечения?

  • Если вас интересует качество вашего набора тестов или рефакторинг крупного устаревшего проекта. Покрытие кода может показать вам, какие именно части вашей кодовой базы покрыты.
  • Если вы хотите быстро показать, что определенная часть кодовой базы достигнута. Вместо использования console.log для отладки в стиле printf или ручного пошагового выполнения кода покрытие кода может отображать оперативную информацию о том, какие части ваших приложений были выполнены.
  • Или, может быть, вы оптимизируете скорость и хотели бы знать, на каких местах сосредоточиться? Счетчики выполнения могут указывать на горячие функции и циклы.

Как рассчитывается покрытие кода? 🤓

Традиционный способ расчета покрытия — вставка счетчиков в исходный код.

Вот как такие инструменты, как Istanbul и Blanket, обрабатывают исходный код.

Вместо оснащения исходного кода счетчиками V8 добавляет счетчики к байт-коду, сгенерированному из исходного кода.

Как получить покрытие кода непосредственно из V8

Ну, я скажу, что команда Node.js сделала это довольно просто. Все, что нам нужно сделать, это установить переменную среды NODE_V8_COVERAGE, и Node.js начнет выводить покрытие в каталог, указанный в качестве аргумента.

Это создаст файл JSON в каталоге покрытия.

Покрытие выводится в виде массива объектов ScriptCoverage:

Чтобы сделать удобочитаемый отчет, вы можете использовать c8,

Это создаст отчет в формате HTML.

ТАДА! у нас есть покрытие прямо с двигателя V8.😊

Наконец, давайте разберемся с обоснованием этого поста. В современном мире такие инструменты, как Стамбул, способны добиться того же, тогда зачем нужно нативное решение. Подход с транспиляцией имеет несколько недостатков (упомянутых Бенджамином Коу).

Демонстрацию можно найти на https://github.com/kuldeepkeshwar/code-coverage-from-v8-demo.

Спасибо, что прочитали эту статью. Давайте продолжим работу с Twitter и Github.