Я использую некоторые методы spec_helper.rb для генерации примеров RSpec, и один из них зависит от данных другого.
Пример spec_helper.rb
:
def it_should_be_big(objects)
@tested_objects ||= []
objects.each do |obj|
it "should be big (#{obj.name})" do
obj.should be_big
end
end
@tested_objects += objects
end
def it_should_be_small(objects)
@tested_objects ||= []
objects.each do |obj|
it "should be small (#{obj.name})" do
obj.should be_small
end
end
@tested_objects += objects
end
def it_should_have_tested_for_all_objects
it "should test for all objects" do
@tested_objects ||= []
(all_objects - @tested_objects).should == []
@tested_objects = []
end
end
Пример something_spec.rb
:
describe "something" do
it_should_be_big(some_objects)
it_should_be_small(some_other_objects)
it_should_have_tested_for_all_objects
end
Я знаю, что код не имеет особого смысла, но он соответствует фактическому коду, где он имеет значение (переменная @tested_objects
).
Когда я запускаю спецификации, онне могу найти переменную @tested_objects (я предполагаю, что она использует другое пространство переменных внутри блоков примера). Есть ли способ передать переменную внутрь блока примера конечного вспомогательного метода?
RSpec 2.5, Rails 3.0.4, Ruby 1.8.7