2011-03-15 57 views
8

基本上我想創建一個數組,然後在我的規格期間追加到它,然後才能最終處理並顯示給用戶。我可以想出幾個解決方法,但理想情況下我想執行以下操作。RSpec 2之前(: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 2011-03-16 08:05:11

+7

'add_setting'絕對不適用於此!爲什麼不使用全局變量?我認爲在掃描代碼時會更清楚它是什麼以及更容易發現。 – 2012-02-08 12:35:59

+0

肯定有點hacky,但完美的作品。任何其他方式來做到這一點?使用全局變量會導致消息:警告:從頂層訪問類變量 – justingordon 2013-02-23 22:03:19