Techioz Blog

simplecov を使用した Ruby on Rails テスト カバレッジ

概要

コードのテスト カバレッジを分析したいので、simplecov gem をインストールしました。

テスト環境には、REST API テスト (Java+Rest-Assured) と Web UI テスト (Java-Selenium) の 2 つの別個のプロジェクトがあります。 ご覧のとおり、Rails アプリ内には単体テストがなく、外部プロジェクトを使用してテストしています。

チュートリアルで説明されているように simplecov gem を構成し、これを Rails スクリプトに追加しました。

require 'simplecov'
SimpleCov.start 'rails'
puts "require simplecov"

アプリをロードすると、印刷した文字列が表示されます。

両方の自動化テスト プロジェクトを実行し、Rails ログでその出力を確認しましたが、コントローラー/モデルはまったくカバーされておらず、一部の gem と Rails の初期化ファイルはごく一部しか表示されませんでした。

ネットを検索して、boot.rb または puma.rb にコード フレーズを入れてみましたが、同じ結果が返されました。

何か案は?

編集

すべてのコメントは何も役に立ちませんでしたが、非常に興味深いことを発見しました。どの場合でも、テスト済みとしてマークされたメソッドの名前のみが表示され、コンテンツ (コントローラー内の) は表示されません。 simplecov 開始フレーズを bin/rails、puma.rb、config.ru、environment.rb の両方に配置しようとしましたが、コード カバレッジの望ましい結果はすべて得られませんでした。

解決策

simplecov が Rails アプリのカバレッジ全体を測定できるかどうかはわかりません…しかし、ラックミドルウェアとして接続できるものをグーグルで調べました。

https://translate.google.com/translate?hl=ja&sl=en&tl=ja&u=https://github.com/danmayer/coverband

また、その出力は simplecov と互換性があります。したがって、あなたの場合には役立つようです。

質問で述べたように、pumaを使用しています。マルチスレッドなので、いくつかの Rails アプリが生成され、それらの simplecov 出力が互いの結果を上書きしているのではないかと思います。 webrick のようなシングルスレッドサーバーで試してみますが、これによりテストが遅くなる可能性があります (テストの実際の起動方法によって異なります)。または、カバーバンド gem を試してください。

また、サーバーがシングルスレッドであっても、各リクエストが simplecov の出力を上書きしないかどうかはわかりません。