https://github.com/mugijiru/ember-rails-todo-app のカバレッジを取るためにやったことです。

書いたコードは https://github.com/mugijiru/ember-rails-todo-app/blob/712e6ca7e2b1135ba11c56c8c3e9ca870f020ec2/.github/workflows/ci.yml#L58-L98 にあるので、それだけ見れば十分かとは思うけど、それで済ませるのも寂しいので少しテキストも書いておきます。

アプリの構成

単一の Rails アプリケーション上で複数の Ember.js アプリケーションを動かせるようにするために Ember.js のアプリケーションは ember/todo-app という位置に作成しています。

RAILS_ROOT
├── ember/todo-app
│    ├── package.json
│    └── yarn.lock
└── spec

そのためテストを実行するディレクトリが異なるという状況です。

rspec の方は

$ rspec spec

で済むけど Ember.js のテストは

$ cd ember/todo-app && yarn test

しないといけないみたいな。

複数テストスイートのカバレッジを取る

今回は上記のように若干構成が複雑なので手を入れていますが、どちらも同じ階層でテストを実行できるのであれば https://docs.codeclimate.com/docs/configuring-test-coverage#multiple-test-suites に書いていることをやれば問題ないはずです。

なのですが今回は若干構成が複雑なため、そのままではダメでした。いい感じに統合してくれなかった。

じゃあどうしたかというと

- name: Format ember test result
  run: cd ember/todo-app && ../../cc-test-reporter format-coverage -o ../../tmp/cc.ember.json --add-prefix ember/todo-app

という感じで、深い階層にある Ember.js 側のカバレッジのフォーマットを取得する時にちょっと調整している。

まず cd ember/todo-app で Ember.js アプリケーションの階層に移動して、 cc-test-reporter format-coverage を実行する際に -o オプションを使って後で扱いやすい出力先を指定して --add-prefix で移動先である ember/todo-app を指定している。

この --add-prefix は Code Climate の公式ドキュメントにある List of subcommands という項目には載ってないんですよね。。。あと --debug もそこには載ってないけど使えるみたい https://github.com/codeclimate/test-reporter/blob/master/man/cc-test-reporter.1.md

それはともかく、そんな感じで format 時の出力を調整したら後段の sum-coverage の際に良い感じにまとめてくれるようになる。