Небольшая предыстория: последние пару недель я работал над приглашением-участником, приложением 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:

  1. test выполняет все тесты Mocha локально и сообщает, какой у вас уровень LoC (полностью локально).
  2. 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.