1

Railsアプリと、Javaで記述された外部のSeleniumベースのテストシステムを開発しているテスターがいます。彼のテストスイートの現在のコードカバレッジを知りたいので、:development envでSimpleCovを使用して、テストスイートをポイントさせたいと思います。

SimpleCov行をenv/development.rbの先頭に配置しようとしましたが、作成されたのは./coverageディレクトリのみであり、アプリケーションで試したクリックのカバレッジレポートは実際には更新されませんでした。webrickをやめたら、それは書き留められるだろうと思ったが、それでも何も起こらなかった。

SimpleCovはこれを行うことができますか?(またはRubyの他のカバレッジツール?)どのように?

4

1 に答える 1

1

これをRails2で機能させるには、次のようにします(ただし、Rails3はそれほど違いはありません)。

次の行をあなたの上部に追加しますconfig/environments/development.rb

require 'simplecov'

# clean the existing coverage directory before writing the new results.
Dir.foreach("coverage") do |file|
  next if [".",".."].include?(file)
  FileUtils.rm_rf(File.join("coverage",file), :verbose=>true)
end

SimpleCov.start 'rails' do
  add_filter "/vendor/"
end

次に、便利なコントローラーメソッドをコントローラーの1つに追加します(管理コントローラーに追加したので、誤って呼び出されることはありませんが、開発専用に保護しているため、何でもできます):

class Admin::DebugController < ApplicationController

  if RAILS_ENV=="development"
    # see config/environments/development.rb
    def coverage
      SimpleCov.result.format!
      render :text => "Wrote results. STOP AND RESTART THE SERVER TO BEGIN A NEW COVERAGE RUN!!"
    end
  end

end

ここで、Railsサーバーを通常どおりに起動し、外部テストスイートをそれに対して実行します(または手動統合QEテスター;)

統合テストの実行が終了したら、管理コントローラーで設定したURLを押します。

http://localhost:3000/admin/debug/coverage

注:このURLは開発中にのみ機能/存在します!

出来上がり!coverage/**カバレッジレポートは、railsディレクトリに書き出されます。coverage/index.htmlブラウザに読み込んで表示できます。

正当化

SimpleCovの通常の使用法はユニットおよび機能テストを対象としていますが、外部統合テストを評価する機能を追加すると、QEテスターは、ターゲットレールアプリケーション内でテスト戦略が実際に何をテストするかについて貴重なフィードバックを得ることができます。

これは、ほとんどのRailsアプリケーションにとっては些細な違いかもしれませんが、アプリケーションが、アプリケーションモデルに動的に混合される他のアプリケーションからの大量のデータの「パススルー」として動作する場合に役立ちます(たとえば、ダッシュボードまたはコンソールアプリ)。これらの種類のアプリでは、レールテスターは、実際には基盤となるデータ(ネットワーククラスターなど)の順列をテストしているのに、アプリの順列をテストしていると考える場合があります。この状況では、コードカバレッジにより、テスト対象の可視性がさらに高まります。

于 2012-09-18T17:52:42.737 に答える