2011-03-15 11 views
8

基本的には、配列を作成してからスペックの間に追加してから、最後に処理してユーザーに表示します。私はいくつかの回避策を考え出すことができますが、理想的には次のことをしたいと思います。RSpec 2 before(:suite)可変スコープ

RSpec.configure do |config| 
    config.before(:suite) { @array_of_stuff ||= [] } 
    config.after(:suite) { process_and_print(@array_of_stuff) } 
end 

def process_and_print(array) 
    # do stuff 
end 

は残念ながらではなく、驚くほど@array_of_stuffはスコープ内ではなく、前でセットアップの場合とは異なり、私のスペックからに追加することはできません(すべて)ブロック。

RSpecが提供するものはありますか?このようなことは非常に簡単です。

答えて

9

これはおそらく、このためのものではありませんでしたが、あなたはcustom settingsを使用することができます。

spec_helper

RSpec.configure do |config| 
    config.add_setting :my_array 
    config.before(:suite) { RSpec.configuration.my_array = [] } 
end 

例のスペック:感謝

it "should do something" do 
    RSpec.configuration.my_array << "some value" 
    RSpec.configuration.my_array.length.should eql(1) 
end 
+0

を。 – lebreeze

+7

'add_setting'はそれを意図したものではありません!グローバル変数を使用するだけではどうですか?私は、それが何であるかについてより明確であり、コードをスキャンするときに見つけやすいと思う。 –

+0

間違いなくちょっとハッキリですが、完璧に動作します。これを行う他の方法?グローバルを使用するとメッセージになります:警告:トップレベルからのクラス変数へのアクセス – justingordon

関連する問題