2013-05-28 1 views

ответ

1

Вы не можете выполнить свой тест с использованием let во внешнем контексте таким образом из-за того, что RSpec является DSL. RSpec сначала считывает примерные файлы спецификаций, прежде чем запускать тесты. Он попадает на some.each во время разбора DSL до того, как будет запущен какой-либо из реальных тестов.

Эти ошибки, поскольку some определяется на примере объекта, но describe и context выполняются в контексте объекта группового объекта примера.

Вы можете увидеть это с:

describe 'thing' do 
    p self.ancestors 
    #=> [#<Class:0x007fa97a0761f8>, RSpec::Core::ExampleGroup, RSpec::Matchers, 
    # RSpec::Core::MockFrameworkAdapter, RSpec::Core::SharedExampleGroup, 
    # RSpec::Core::Pending, RSpec::Core::Extensions::InstanceEvalWithArgs, 
    # RSpec::Core::ExampleGroup::LetDefinitions, 
    # RSpec::Core::ExampleGroup::NamedSubjectPreventSuper, 
    # RSpec::Core::MemoizedHelpers, Object, PP::ObjectMixin, Kernel, 
    # BasicObject] 

    it { p selfs } 
    #=> #<RSpec::Core::ExampleGroup::Nested_1:0x007f8d1b397790 ...> 
end