2012-03-22 5 views
0

私は現在プロジェクトを進めており、テストを隔離テスト(レール依存なし、スタブとモック使用)に移行し始めました。 現在のテストがすべて分離されるまで、テストを分離テストと一緒に実行する必要があり、それによってレール環境が開始されます。レール上で実行されているRails隔離されたテストenv

孤立したテストでは、偽のクラス(クラスFoo; end;)が存在する場合、残りのテストでは元のクラスよりも優先されます。

例:foo_spec.rbで 我々はこのラインを持っている

class Bar; end; 

これは、次の非絶縁試験用のバークラスをオーバーライドします、そして失敗の多くを引き起こします。

私はこれを取り除くために把握できた2つのアプローチがあります: は - のいずれかの試験はレールのenv で実行されたときに偽のクラスをコメントアウト - 別のフォルダに隔離テストを入れてから分離し、それらを実行します休憩(これは理にかなっています)

これに対処するより良い方法はありますか?

答えて

0

rspecを使用しています(何も変更しないでください)。specには、spec_helper.rbというファイルがあり、envとすべての醜いものがロードされています。

spec_fastフォルダー私たちは、独立したlibフォルダーのみを読み込む独自のスペックヘルパーを備えた、レールなしで実行できるすべての仕様を備えています。

我々は別のタスクでのスペックフォルダの実行の両方を聞かせて私たちのCI-サーバーの

if Rails.env.test? 
    require 'rspec/core/rake_task' 
    require 'ci/reporter/rake/rspec' 

    RSpec::Core::RakeTask.new(:all_fast) do |t| 
    t.pattern = 'spec_fast/**/*_spec.rb' 
    end 

    RSpec::Core::RakeTask.new(:all_slow) do |t| 
    t.pattern = 'spec/**/*_spec.rb' 
    end 

    task :all => ["ci:setup:rspec", :all_fast, :all_slow] 
end 

それもただspec/railsspec/fastのように別々のサブフォルダにそれらを置くことが、私はそれを試していなかったことが可能なはずですこれは、スペックファイルで多くのパスを変更することを意味するためです。

+0

ありがとうございました。私はこれが今のところ –

+0

に対処する最も良い方法かもしれないと思いますので、答えのどれもあなたに受け入れられませんか? – phoet

0

私はそれがの右であるかどうかわかりませんが、実際にこのようなコンテキストダミーを手動で作成したダミークラスを定数に割り当てることはできません。代わりに

#no 
class Foo 
    #something 
end 

:代わりの

foo = Class.new do 
    #stuff 
end 

そして、あなたはfoo.newか、心ゆくまでfoo.class_methodことができます。 @fooにもあります。しかし、通常のクラス定義のように定数Fooに代入するのではなく、「匿名」クラスを作成して、それを必要な領域内にある通常の変数に割り当てます。

注:これはrspecを使って「正しい」方法であるとは言いませんが、正しいことを知っているような気がすることはありません。どうにかしてこのようなクラスを作成しないかもしれません。すべて、または私が理解していないか、何か奇妙なfactorygirlものを使用してください。しかし、特定のテストやブロックの範囲に「ダミー」タイプのクラスを作成する必要があるときは、それが私の行いです。

+0

良い点がありますが、Barクラスの実装に「Foo.getX」という行がある場合はどうなりますか?私はそのクラスを見つけることができないので、あなたのメソッドはこの場合には動作しません。 –

関連する問題