Вы не можете выполнить свой тест с использованием 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