JavaScript
wercker
Jest

Mac と Debian stretch とで Jest の coverage 結果が違った話


概要

ある開発中プロジェクトで、これまで JS のテストカバレッジを活用出来ていなかったため軽い気持ちでやっていきをしたら、

開発環境では設定した閾値を越えるのに CI 上ではパスしないためデプロイできないという状況が起こりました。


環境


  • 開発マシン


    • OS: maxOS 10.12.6

    • Node.js: 10.8.0

    • npm: 6.3.0



  • CI (Wercker)


    • OS: Debian stretch-slim

    • Node.js: 8.x

    • npm: 6.x



どちらも Jest のバージョンは 23.4.1 を利用しており、

設定も package.json に記述しているため共通のものを利用しています。

また、カバレッジに関する設定は閾値の設定しか行っていません。

Jest 実行時のコマンドは以下。

jest ./resources/assets/js --no-cache --coverage


結果


  • 閾値を設定したままデプロイ出来るようになりました。

  • 開発環境、CI環境のカバレッジが一致するようになりました。


    • カバー率が一致しなかったのは、実行するテストコード自体が 100% でカバレッジに含まれてしまっていたためでした。

    • macOS でテストコードの分が計上されていた事と、反対に Debian 環境上では計上されなかった事の理由は調べられていません。ご存知もしくは心当たりのある方がいらしたら教えてください :pray:




やったこと

Node.js のバージョンを合わせてみたりしましたが、関係無いようでした。

最終的に package.json の Jest の設定に以下を追加しました。

coveragePathIgnorePatterns [array]

https://jestjs.io/docs/en/configuration.html#coveragepathignorepatterns-array-string

{

"jest": {
"coveragePathIgnorePatterns": [
"__tests__",
"\\.spec\\.js",
"\\.spec\\.ts"
]
}
}

フォーマットは正規表現っぽいんでもうちょっと綺麗に出来るんじゃないかなぁと思います。