Write and Run

it's a simple way, but the only way.

TypeScript+mocha+power-assert+empowerでカバレッジをとってついでにCircleCI+Codecov

表題のとおりだが、更に CircleCI のビルドを高速化するために yarn を使うぞ。

やりたいこと

  • 最新の TypeScript を使う
    • 1.8 とか使わない
  • テストコードも TypeScript で書く
  • empower する
    • 明示的に require('power-assert') しない
  • source map が生きてる状態でカバレッジを取る
    • TypeScript の行ベースで結果が出る

やりたくないこと

  • 中間ファイルの生成

やっていく

ガンガン入れる。

yarn add --dev typescript ts-node babel-register babel-preset-power-assert power-assert mocha nyc @types/mocha @types/node

この状態で、

mocha --compilers ts:ts-node/register,babel-register

とするとテストが、

nyc --extension .ts mocha --compilers ts:ts-node/register,babel-register

とするとカバレッジ付きのテストが走るようになっている。

なので、package.jsonscripts にこれを書く。

    "test": "nyc --extension .ts mocha --compilers ts:ts-node/register,babel-register"

いいですね?

ここからは CI の話

package.jsonscripts にこれを足す。

    "report-coverage": "nyc report --reporter=lcov  > coverage.lcov"

これでカバレッジのレポートが吐けるようになった。

カバレッジレポートを codecov に送りつけるために circle.yml にこれを書く。

test:
  post:
    - npm run report-coverage && bash <(curl -s https://codecov.io/bash)

あと、CircleCI でのビルドを高速化したいので以下の内容もベタっと書く。

machine:
  node:
    version: 7.0.0

  post:
    - curl -o- -L https://yarnpkg.com/install.sh | bash

dependencies:
  cache_directories:
    - "~/.yarn-cache"

  pre:
    - yarn --version

  override:
    - yarn install

blog.stormcat.io

この記事を参考にした。

結果

package.json

{
  "scripts": {
    "test": "nyc --extension .ts mocha --compilers ts:ts-node/register,babel-register",
    "report-coverage": "nyc report --reporter=lcov  > coverage.lcov"
  },
  "devDependencies": {
    "@types/mocha": "^2.2.32",
    "@types/node": "^6.0.46",
    "babel-preset-power-assert": "^1.0.0",
    "babel-register": "^6.18.0",
    "mocha": "^3.1.2",
    "nyc": "^8.3.2",
    "power-assert": "^1.4.1",
    "ts-node": "^1.6.1",
    "typescript": "^2.0.6"
  }
}

circle.yml

machine:
  node:
    version: 7.0.0

  post:
    - curl -o- -L https://yarnpkg.com/install.sh | bash

dependencies:
  cache_directories:
    - "~/.yarn-cache"

  pre:
    - yarn --version

  override:
    - yarn install

test:
  post:
    - npm run report-coverage && bash <(curl -s https://codecov.io/bash)

最後に

あとはバッジとかつけてかっこよくキメましょう。

ちなみに、この TIPS が適用されているリポジトリがこれです。

github.com

ルーティングルールを DFA として保持するのでルール数が増えても速いはず、というサーバーサイド用の URL ルーターです。