[rspec-users] Order guarantees of let

Rick DeNatale rick.denatale at gmail.com
Mon Aug 9 11:06:36 EDT 2010

On Mon, Aug 9, 2010 at 8:49 AM, David Chelimsky <dchelimsky at gmail.com> wrote:
> On Aug 9, 2010, at 7:38 AM, Ashley Moran wrote:
>> Hi
>> I was just about to replace a `before` block along the lines of:
>>  before(:each) do
>>    @cti_b_id = service.create(name: "Item-B")
>>    @cti_z_id = service.create(name: "Z-Item")
>>    @cti_a_id = service.create(name: "Item-A")
>>    # ...
>>  end
>> with
>>   let!(:cti_b_id) { ... }
>>   let!(:cti_z_id) { ... }
>>   let!(:cti_a_id) { ... }
>> But then I wondered - since the spec depends on the order they are created in (it proves ordering is independent of creation order) - is the run order of `let!` guaranteed?  I imagine they run in the order I expect (ie top to bottom), but I wondered if that was an explicitly stated property of RSpec?
> Yes, eval'd in order. No, not explicitly stated, but I think it should be. Want to submit a patch with a spec for this?


First of all, what's let! as opposed to let, I can't seem to find it
via google or the latest draft of the book.

Second, unless let! is a new method which not only defines the
memoized method but invokes it, then the order of evaluation will
depend on the order the generated let methods are invoked in the
example won't it?

Rick DeNatale

Blog: http://talklikeaduck.denhaven2.com/
Github: http://github.com/rubyredrick
Twitter: @RickDeNatale
WWR: http://www.workingwithrails.com/person/9021-rick-denatale
LinkedIn: http://www.linkedin.com/in/rickdenatale

More information about the rspec-users mailing list