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 の出力を上書きしないかどうかはわかりません。