2011-03-15 13 views
8

Zasadniczo chciałbym utworzyć tablicę, a następnie dołączyć do niej podczas mojej specyfikacji przed ostatecznym przetworzeniem i wyświetleniem jej użytkownikowi. Mogę wymyślić kilka obejść, ale najlepiej chciałbym wykonać następujące czynności.RSpec 2 przed (: pakiet) zakres zmienny

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 

Niestety ale nie zaskakująco @array_of_stuff nie jest w zakresie i nie mogą być dołączane do od moich specyfikacji, w przeciwieństwie jeśli instalacyjny w przed (: all) blok.

Czy jest coś, co zapewnia RSpec, który uczyniłby coś takiego bardzo prostym?

Odpowiedz

9

Został on prawdopodobnie nie są przeznaczone do tego, ale można użyć custom settings:

spec_helper:

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

przykład Spec:

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

bardzo cenione. – lebreeze

+7

'add_setting' jest zdecydowanie _nie_ przeznaczone do tego! Dlaczego po prostu nie użyć zmiennej globalnej? Myślę, że byłoby bardziej jasne, co to jest i łatwiejsze do wykrycia podczas skanowania kodu. –

+0

Zdecydowanie nieco hacky, ale działa idealnie. W inny sposób to zrobić? Korzystanie z globali powoduje wyświetlenie komunikatu: warning: dostęp do klasy class z poziomu tween – justingordon