2011-03-15 60 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