2

Ruby-2.0.0p247 ActiveRecord-4.0.1 Cucumber 1.3.10 Aruba-0.5.3 SimpleCove-0.8.2

ActiveRecord を使用している NON-RAILS プロジェクトで、Aruba で Cucumber を使用しています。私たちのキュウリ機能は、インプロセスとアウトプロセスの両方でコードを実行します。アウト プロセス コードは、bin のスタートアップ スタブを介して、本番環境と同じローダー シーケンスを使用して実行されます。

#!/usr/bin/env ruby
require 'bundler/setup'
Bundler.require

require 'pathname'
my_dir = Pathname.new(
  File.join( File.dirname(
    __FILE__ ), '../', 'lib/' ) ).realpath.to_s + '/'

require my_dir +  File.basename( __FILE__ )

HllThForexRssFetch::Main.new( ARGV ).execute
#EOF

features/support/env.rb ファイルには次のものが含まれます。

$ cat features/support/env.rb
# Must load and start simplecov before any application code
require 'simplecov'
SimpleCov.start do
  add_filter "/features/"
  add_filter "/libexec"
  add_filter "/lib/hll_active_record/"
  add_filter "/test/"
  add_filter "/tmp/"
end
SimpleCov.command_name( "Cucumber Features" )

# Do not use cucumber/rails in standalone projects
#require 'cucumber/rails' 

. . .

ステップ定義が aruba の実行コマンドを介して外部のビン/ファイルを呼び出すと、ステップ定義は適切に機能し、テストは期待どおりに完了しますが、コード カバレッジは残りの実行とマージされません。私が求めているのは、アウトプロセス テストのコード カバレッジとキュウリによってインプロセスで直接実行される部分をレポートするように simplecov を設定する方法の説明です。

どうやってこれを行うのですか?

4

2 に答える 2

5

私はあなたに似た環境を持っています。これが私がそれを機能させた方法です:

次のようなディレクトリ ツリーを想定します。

project
|- bin
|  |- binary
|- lib
|  |- ...
|- spec
|  |- ...
|- features
|  |- support
|  |  |- env.rb
|  |- ...

最初にこの問題を確認してください https://github.com/colszowka/simplecov/issues/234

バイナリは simplecov を起動するように記述されています。ハックですが、このヘッダーをバイナリ (project/bin/binary) に追加しました。

if ENV['COVERAGE']
  require 'simplecov'

  # As described in the issue, every process must have an unique name:
  SimpleCov.command_name "binary #{Process.pid}"

  # When running with aruba simplecov was using /tmp/aruba as the root folder. 
  # This is to force using the project folder
  SimpleCov.root(File.join(File.expand_path(File.dirname(__FILE__)), '..'))

  SimpleCov.start do
    filters.clear

    # Because simplecov filters everything outside of the SimpleCov.root
    # This should be added, cf. 
    # https://github.com/colszowka/simplecov#default-root-filter-and-coverage-for-things-outside-of-it
    add_filter do |src|
      !(src.filename =~ /^#{SimpleCov.root}/) unless src.filename =~ /project/
    end

    # Ignoring test folders and tmp for Aruba
    add_filter '/spec/'
    add_filter '/test/'
    add_filter '/features/'
    add_filter '/tmp/'
  end
end

次に、キュウリ内のバイナリの呼び出しで、COVERAGE 環境変数を設定する必要があります。feature/support/env.rb の before 節で:

require 'simplecov'
SimpleCov.command_name 'Cucumber'

Before do
  # This is using the aruba helper, 
  # cf. https://github.com/cucumber/aruba/blob/master/lib/aruba/api.rb
  set_env('COVERAGE', 'true')
  # This could also be accomplished with the "I set the environment variables to:" step
end

環境に 2 つのフレームワーク (この例では RSpec と Cucumber など) がある場合は、 https://github.com/colszowka/simplecov#merging-resultsを忘れないでください。

于 2013-12-10T21:18:01.790 に答える
0

上記を使用して、aruba プロセスの PID に基づいて command_name を設定すると、SimpleCov は非常に大きな結果セットを蓄積し、古い実行で結果を汚染します。

コマンド名を次のように設定すると、うまくいきました。

# As described in the issue, every process must have an unique name:
SimpleCov.command_name ARGV.join(' ')

これにより、同じ引数を使用した最新の実行のみが結果に含まれます。

于 2014-02-25T15:34:11.033 に答える