Небольшая предыстория: последние пару недель я работал над приглашением-участником, приложением GitHub, которое использует фреймворк Probot, позволяющий организациям автоматически приглашать новых участников в свою организацию.
На самом деле это моя первая попытка развернуть приложение Node, и я хотел быть похожим на крутых ребят и убедиться, что качество моего кода соответствует требованиям, написав тесты (хотя в настоящее время у меня всего <100 LOC).
Я использовал Mocha и Expect для тестирования своего кода (они являются значениями по умолчанию для Probot) и решил, что хочу включить репортера тестового покрытия в свой поток непрерывной интеграции (который развертывался в Heroku всякий раз, когда проходила моя сборка TravisCI) .
Я решил использовать Codecov.io для интеграции покрытия кода с моим репозиторием GitHub, основываясь на том факте, что у него было симпатичное расширение для браузера, которое интегрируется в GitHub (особо не думал об этом). Codecov в свою очередь порекомендовал Стамбул генерировать отчеты о покрытии локально.
Чтобы запустить Istanbul, я использовал nyc (официальный интерфейс командной строки Стамбула), который хорошо интегрируется с Mocha (или любым другим средством запуска тестов, как я слышал). Выполнить тесты с помощью Mocha и получить отчет о покрытии с помощью nyc так же просто, как запустить nyc mocha
.
Я также решил разделить мою сборку Travis на два разных скрипта в моем package.json
:
test
выполняет все тесты Mocha локально и сообщает, какой у вас уровень LoC (полностью локально).report-coverage
упаковывает отчет и отправляет информацию в Codecov.
// package.json ... "scripts": { "test": "nyc mocha", "report-coverage": "nyc report --reporter=text-lcov > coverage.lcov && codecov" } ...
… В .travis.yml
просто добавьте оба сценария в свою сборку:
// .travis.yml ... script: - npm run test - npm run report-coverage ...
… И не забудьте добавить отчеты, созданные nyc, в свой .gitignore
:
// .gitignore ... .nyc_output coverage *.lcov ...
У меня это пока работает довольно гладко. Теперь я все еще могу запустить npm test
, чтобы убедиться, что новый код работает должным образом, и каждая сборка Travis отправляет обновленную информацию о покрытии кода в Codecov.