Докато разучавах rspec попаднах на реализацията на let(name, &block), което замества създаването на променлива в тестовете, като една от целите е тя да се оцени, ако и като бъде извикана.
module Let
extend ActiveSupport::Concern
included do
extend Let::ClassMethods
end
private
def __memoized # :nodoc:
@__memoized ||= {}
end
module ClassMethods
def let(name, &block)
define_method(name) do
__memoized[name] ||= instance_eval(&block)
end
protected(name)
end
end
end
Източник: http://ruby-lambda.blogspot.com/2010/06/stealing-let-from-rspec.html
и още: https://www.relishapp.com/rspec/rspec-core/v/2-6/docs/helper-methods/let-and-let