
Содержание статьи
Тестирование программного обеспечения является важной частью процесса разработки программного обеспечения. Вы запускаете тесты на разных этапах жизненного цикла разработки программного обеспечения, и вам нужно убедиться, что у вас есть хорошее покрытие тестов.
Вот несколько основных причин для написания тестов программного обеспечения:
- Тестирование предотвращает внесение критических изменений в вашу кодовую базу в будущем. Другими словами, тесты, которые вы пишете сейчас, могут спасти вас от самого себя в будущем.
- Тестирование гарантирует, что создаваемый продукт соответствует необходимым спецификациям.
- Хорошо проверенный код дает вам больше уверенности в качестве вашего кода.
- Тестирование уменьшает вероятность того, что в вашей кодовой базе есть код с неизвестным поведением, которое может стать источником ошибок.
- Тестирование упрощает поддержку кода. Вы не можете сказать, как изменение небольшой части вашей кодовой базы может повлиять на всю кодовую базу, если у вас нет высокого покрытия кода.
В этой статье вы узнаете, как создать отчет о покрытии кода с помощью действий codecov и gitHub.
Что такое покрытие кода?
Покрытие кода – это показатель, который помогает вам знать, сколько вашего исходного кода было проверено. Существует ряд инструментов, которые можно использовать для создания отчетов о коде. Эти инструменты включают в себя:
Большинство инструментов anyis покрытия кода используют набор показателей для отчета о покрытии кода anysis. Эти показатели включают:
- Покрытие функций
Количество объявленных функций, вызванных после запуска тестовых наборов. - Покрытие заявления
Количество операторов, выполненных после запуска наборов тестов. - Охват филиалов
Сколько кода филиалаif
блоки кода были выполнены. - Покрытие условий
Количество логических выражений, которые были провереныtrue
иfalse
ценности. - Покрытие линии
Проверены строки кода.
В этой статье мы прежде всего сосредоточимся на том, как использовать действия codecov и gitHub для создания отчета о покрытии кода для проекта Node.
Почему важно покрытие кода?
Хорошее покрытие кода дает вам уверенность в отправляемом коде, особенно если ваши тесты надежны и хорошо продуманы.
Когда вы пишете тесты, чтобы увеличить охват вашего кода, есть большая вероятность, что вы обнаружите ошибки и исправите их перед отправкой в производство.
Что такое Codecov?
Codecov – это инструмент, который можно использовать для создания отчетов о проектах. Вы можете загрузить данные о покрытии кода, сгенерированные в вашей локальной файловой системе, в codecov и легко визуализировать отчет о покрытии на разных диаграммах.
Однако в этой статье вы собираетесь использовать действия GitHub, чтобы процессы генерирования отчетов о покрытии и загрузке их в codecov были автоматизированы.
Вы можете интегрировать codecov как часть своего непрерывного рабочего процесса интеграции. Codecov способен делать комментарии к запросу на подъемник и многое другое. Эти комментарии помогут другим разработчикам узнать, как объединение их запроса на подъемник повлияет на покрытие кода, не оставляя интерфейса GitHub.
Вы также можете отобразить значок, показывающий отчет о покрытии в вашем хранилище GitHub, чтобы его могли видеть все сотрудники вашего проекта. Вам просто нужно интегрировать codecov в свой непрерывный рабочий процесс интеграции.
Подробнее обо всех других функциях, которые предлагает codecov, можно прочитать в документации.
Hpw tp создать проект и создать отчет о покрытии
В следующих шагах вы собираетесь создать простой проект Node и сгенерировать для него отчет о покрытии codecov.
Предпосылки
Для выполнения команд в следующих подразделах на вашем компьютере должно быть установлено следующее.
Шаг 1: Создайте каталог и перейдите к нему
На этом шаге вы собираетесь создать каталог под названием learn-test-coverage
а затем перейдите к нему. Вы можете дать каталогу другое название, если хотите, если это значимое название.
Выполните следующие команды в терминале:
mkdir learn-test-coverage
cd learn-test-coverage
На следующем шаге вы собираетесь инициализировать проект.
Шаг 2: Инициализация проекта
На этом шаге вы собираетесь инициализировать проект, выполнив команду ниже в терминале:
npm init --yes
Успешное выполнение вышеприведенной команды создаст файл a package.json
файл в корне каталога вашего проекта.
На следующем шаге вы собираетесь установить джек как зависимость разработки.
Шаг 3: Установите Jest как зависимость
На этом шаге вы собираетесь установить джек в качестве зависимости для разработки. Jest – это простая платформа для тестирования JavaScript, которая обычно работает из коробки в Node с минимальными настройками.
Выполните следующую команду в терминале:
npm install --save-dev jest
После успешного выполнения вышеприведенной команды вы сможете увидеть node_modules
каталог и package-lock.json
файл, созданный в корне каталога вашего проекта. Вы также можете видеть, как Jest установлен как зависимость разработки в файле package.json
файл.
На следующем шаге вы инициализируете репозиторий git в вашем проекте.
Шаг 4: Инициализируйте репозиторий Git
На этом шаге вы собираетесь инициализировать репозиторий git в своем проекте, выполнив команду ниже:
git init
Создать .gitignore
файл в корне каталога проекта и добавьте в него следующий код. Это будет игнорировать node_modules
файл, чтобы позже он не был передан в удаленное хранилище.
/node_modules
На следующем шаге мы объявим простую функцию и напишем для нее тест.
Шаг 5: Объявить функцию и написать для нее тест
На этом шаге вы объявите простую функцию под названием sum
в sum.js
файл. Эта функция принимает два параметра и возвращает их сумму. Вы также будете писать тесты для своего кода в sum.test.js
файл.
Выполните следующую команду в терминале:
touch sum.js sum.test.js
Вы должны иметь возможность увидеть два файла, созданных в вашем проекте. Скопируйте и вставьте код ниже sum.js
:
function sum(num1, num2) {
return num1 + num2;
}
module.exports = sum;
Аналогично скопируйте и вставьте следующий код sum.test.js
:
const sum = require("./sum");
test("adds 1 + 2 to equal 3", () => {
expect(sum(1, 2)).toBe(3);
});
Измените значение "test"
имущество в вашем package.json
к "jest --coverage"
так что значение "scripts"
свойство выглядит так:
{
"test": "jest --coverage"
}
В терминале запустить npm test
чтобы запустить тест. После завершения теста вы сможете увидеть результат покрытия кода в терминале и a coverage
сгенерированный каталог.
Вот что я вижу в своем терминале:
Вы также можете просмотреть результат в браузере, открыв index.html
файл внутри coverage/lcov-report
папку. Вы должны видеть следующее:
Вы можете создать отчет о покрытии, поскольку Jest поставляется в комплекте со Стамбулом. Убедитесь, что вы удалили coverage
файл, поскольку он вам не нужен, потому что мы автоматизируем процесс с помощью действий GitHub.
Вы должны иметь возможность определить, какие показатели Стамбул использует для создания отчета о покрытии (показатели, которые я упоминал в начале статьи).
На следующем шаге мы прибавим к нашему проекту непрерывную интеграцию действий GitHub.
Шаг 6. Добавьте рабочий процесс непрерывной интеграции действий GitHub
На этом шаге вы добавите рабочий процесс непрерывной интеграции действий GitHub в свой проект, чтобы codecov автоматически создавал отчет о создании запроса на выписку.
Создать .github
файл в корне папки вашего проекта. Внутри .github
папку, создайте a workflows
папку. Затем внутрь workflows
создать codecov.yml
файл. Файла не требуется называть имя codecov
. Вы можете дать ему любое имя.
Скопируйте и вставьте нижеприведенный код внутрь codecov.yml
файл.
Это файл конфигурации рабочего процесса. Он запустит ваш тест, когда два события push
и pull_request
происходят. Вы можете прочитать больше о синтаксисе YAML и действиях gitHub, чтобы понять содержимое файла ниже.
name: Running Code Coverage
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [12.x, 13.x, 14.x, 15.x]
steps:
- name: Checkout repository
uses: actions/checkout@v2
with:
fetch-depth: 2
- name: Set up Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v1
with:
node-version: ${{ matrix.node-version }}
- name: Install dependencies
run: npm install
- name: Run tests
run: npm run test
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v1
Последний шаг отвечает за загрузку отчета о покрытии в codecov в приведенном выше файле конфигурации.
На следующем шаге вы собираетесь создать репозиторий на GitHub и переместить в него свой проект
Шаг 7: Создайте репозиторий на GitHub и внесите в него изменения
На этом шаге вы собираетесь создать репозиторий на gitHub и внести в него изменения.
Выделите GitHub. Создайте пустой репозиторий и назовите его learn-test-coverage
.
В корне каталога проекта на компьютере выполните следующие команды, чтобы инициализировать хранилище проекта и зафиксировать изменения.
git add .
git commit -m "Initial commit"
Затем вы можете добавить удаленный репозиторий, который вы создали выше, к своему локальному хранилищу, используя команду ниже:
git remote add origin <Remote repository>
Наконец, вы можете отправить свои изменения в удаленное хранилище, используя команду ниже:
git push origin master
На следующем шаге мы свяжем наш репозиторий GitHub из codecov. Это гарантирует, что наши данные покрытия автоматически загружаются всякий раз, когда мы создаем запрос на выписку, чтобы генерировать отчет.
Шаг 8: Свяжите свой удаленный репозиторий с codecov
На этом шаге вы собираетесь связать свой репозиторий из codecov. Но сначала нужно зарегистрироваться.
Codecov позволяет вам зарегистрироваться с помощью своего аккаунта GitHub всего за пару минут. Затем вы можете выбрать репозиторий GitHub, который нужно связать на информационной панели codecov.
После выбора хранилища вы будете перенаправлены на страницу с маркером. Этот маркер вам не нужен для общедоступных хранилищ.
Для приватных хранилищ вам нужно будет добавить его к вашим секретам GitHub, а затем добавить следующее в нижней части файла конфигурации рабочего процесса, чтобы он выглядел так:
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v1
with:
token: ${{ secrets.YOUR_SECRET_TOKEN }}
Шаг 9. Проверьте свой непрерывный рабочий процесс интеграции
На этом шаге вы намерены проверить свой непрерывный рабочий процесс интеграции.
Создать README.md
файл в корне вашего проекта. Скопируйте и вставьте значок codecov на панель codecov под вкладкой настроек в вашем README.md
файл. Вот так смотрятся значки.
Зафиксируйте и внесите изменения в GitHub. После завершения рабочего процесса CI вы сможете увидеть покрытие кода, указанное на вашем значке.
Вы также можете просмотреть отчет о покрытии на информационной панели codecov. Попробуйте создать запрос на выписку, чтобы увидеть, что произойдет.
Чтобы узнать больше о том, что еще вы можете сделать, просмотрите документацию Codecov.
Если вы застряли, вы можете проверить мой проект на GitHub.
Как codecov создает отчет о покрытии?
Codecov использует термины ударить, частичный и мисс чтобы описать покрытие кода в вашем проекте. Охват – это соотношение hits
на сумму hits
, partials
и misses
.
Если код описан как a ударитьэто означает, что исходный код был исполнен тестовым набором.
Если это описано как частичный, это указывает на то, что исходный код не был полностью исполнен набором тестов. Остались ветки, которые не были исполнены.
А мисс указывает, что исходный код не производился тестовым набором.
База кода, имеющая 5 строк, выполненных тестами из 12 общих строк, получит коэффициент покрытия 41% (округление в меньшую сторону) — Документация Codecov
Таким образом, вы интегрируете codecov как часть вашего непрерывного рабочего процесса интеграции. Если вы хотите изучить больше функций, вы можете ознакомиться с документацией Codecov.
Вывод
В этой статье мы рассмотрели, как можно интегрировать codecov как часть рабочего процесса непрерывной интеграции.
Увеличение покрытия кода поможет вам во многих отношениях. Но наличие большего покрытия кода только для этого может привести к проблемам, если ваши тесты не будут надежными и хорошо продуманными.
Инструменты анализа покрытия кода – это только инструменты, предназначенные для облегчения работы. Но вы не должны заменять их просмотром кода. Инструмент настолько хорош, сколь хорош его пользователь.