読者です 読者をやめる 読者になる 読者になる

みかづきメモ

学習したことのメモとか、日記とか、備忘録。

Node.js + CircleCI + Coveralls でカバレッジを取得してみる

TypeScript + Node.js でアプリを作っているのですが、テストのカバレッジを取得して、
GitHub にて、そのバッジを README.md に表示してみようという試み。

TypeScript + Node.js だけじゃなく、 JavaScript でもいけます。


前提条件としては、下の通り。

ということで、早速設定していきます。


まず、 CircleCI にて、 Coveralls のトークンを設定します。
はじめ、 Coveralls にリポジトリを登録した際には、 Travis CI 用の設定方法が書いてありますが、そこの repo_token の値をコピーして、
CircleCI のプロジェクト設定の Environment variables に追加します。

Name には COVERALLS_REPO_TOKEN を、 Value にはさっきコピーした文字列をいれます。
こんな感じ。

f:id:MikazukiFuyuno:20160301030203p:plain:w400

xxxx9zAK ってのが、入力した値。
ついでに、COVERALLS_SERVICE_NAME というのも、 ValueCircleCI にして追加します。
まぁ、なくても正常に動作はしますけども。

次に、 JavaScript 用のカバレッジツールを導入します。
とりあえず、 CircleCI でおすすめされていた blanket.js を使うことにしたので、
導入し、設定しておきます。

$ npm install blanket --save

で、 package.json を開き、項目を追加します。

// @ package.json

{
  "name": "Hoge",
  ...
  "config": {
    "blanket": {
      "pattern": [ "" ],
      "data-cover-never": [ "node_modules" ]
    }
  },
  ...
}

次に、生成されたレポートを Coveralls へ送信するためのモジュールを導入します。
この時、テストフレームワークとして mocha を使っているので、レポーターも導入します。

$ npm install coveralls --save-dev
$ npm install mocha-lcov-reporter --save-dev

次は、 CI 側で、テストを実行するための設定をします。

// @ circle.yml

test:
  override:
    - npm run test
// @ package.json

{
  "name": "Hoge",
  ...
  "scripts": {
    "test": "NODE_ENV=test YOURPACKAGE_COVERAGE=1 mocha --require blanket --reporter mocha-lcov-reporter | ./node_modules/coveralls/bin/coveralls.js",
    ...
  },
  ...
}

これで、 CI 側は終了です。

あとは、テスト実行前に、 TypeScript のビルドを設定しておけば、カバレッジが取得できます。

ではでは〜。