テストを書かないなんて・・・ってぐらいテストが浸透してきているような気がします。
昔は僕もテストを書かなかったんですが、最近はちゃんと書くようになりました。
そして、CIツールもつかって開発するようになりました。
今のプロジェクトでは、CircleCIを使ってるんですが、テストが笑えないぐらい遅くて悩まされていました・・・。
遅い原因はなにか?
遅い原因は二つあります。
- DBが絡むテストが遅すぎる
- –code-covergeオプションをつけるとクソ重い
どうやら頑張って調査した結果この二つが原因だったようです。
そもそもカバレッジの指標は必要なのか?
たしかに必要です。しかし、毎回カバレッジを計測しなくてもいいのかなぁーって思うんですよね。
まずはテストがこけてない事を保証するのが重要で、カバレッジはその次に重要なんですよね。
つまり、毎回毎回テストするたびにカバレッジ計らなくてもいいんですよ。
今は一人で開発しているからかもしれませんが、masterブランチにmergeするタイミングでカバレッジ計測できればいいなぁーって思うですよね。
masterブランチでテストが実行された場合にカバレッジを計測するテストを実行する
さて、今日の本題なんですが、CircleCIでmasterブランチのみカバレッジを測るようにしてみます。
そもそも、masterブランチだけでテストしたいとかならcircle.yml
に以下のように記述すればいいんですよね。
|
|
しかし今回の場合はテストはすべてのブランチで走らせて、カバレッジ計測だけをmasterブランチで行いたいんですよね。。。
CircleCIにはCIRCLE_BRANCHという環境変数がある!!
どうしようかと悩んでいたんですがCircleCIの環境変数を見ていたら、CIRCLE_BRANCH
なんてのがあるじゃないですか!!
つまりこの環境変数をみれば、どのブランチを使用してるかわかるんですよね。
ということで、テストを実行するシェルスクリプトを書いてみました。
|
|
こんな感じで切り分けるシェルスクリプト書きました。
僕の場合はcorverallsでカバレッジ見てるのでbin/coveralls -v
とかも必要なんですが、まあ使ってない人には必要ないですね。。。
あとはcircle.ymlにこいつを実行するように書いてあげます。
|
|
これでCI環境がだいぶ快適になりました。
カバレッジ測るとテストに17分ぐらいかかるんですが、外したら3,4分で終わります。
最後に
もっといい方法あるよ!って人教えてください・・・
おしまい。