David Chelimsky wrote:
> On Wed, Apr 9, 2008 at 12:33 PM, Rick DeNatale <[EMAIL PROTECTED]> wrote:
>
>> On Wed, Apr 9, 2008 at 11:54 AM, David Chelimsky <[EMAIL PROTECTED]> wrote:
>>
>> > What are you looking to specify and how do you envision the syntax?
>> >
>> > I'm thinking something like:
>> >
>> > obj.should yield_with(no_args).on(:message)
>> >
>> > def message
>> > yield
>> > end
>> >
>> > list.should yield_with(1).then(2).then(3).on(:each)
>> >
>> > def each
>> > yield 1
>> > yield 2
>> > yield 3
>> > end
>> >
>> > That all make sense?
>>
>> Sorta, but what about arguments to the message?
>>
>> def message(x, y, z)
>> yield x+y+z
>> end
>>
>> obj.receiving(:message).with(1,2,3).should yield(6)
>>
>> (1..3).receiving(:each_with_index).should
>> yield_with([1,0]).then([2,1]).then([3,2])
>>
>> or
>>
>> (1..3).receiving(:each_with_index).should yield_with([1,0],([2,1],[3,2])
>>
>> (1..3).receiving(:inject).with(0).should yield_with ???????
>>
>> Now it gets tricky since the sequence of yielded values depends on the
>> block .
>>
>> I don't know that I like where this is going.
>>
>
> Agreed, this could get hairy. Perhaps we should chalk this up to
> implementation detail?
>
> Looking back at the OP:
>
> it "should yield a message_delivery object" do
> create_message_in_factory do |message_delivery|
> message_delivery.should be_instance_of(MessageDelivery)
> end
> end
>
> How about something more like this as an idiom:
>
> it "should yield a message_delivery object" do
> create_message_in_factory do |message_delivery|
> return message_delivery
> end.should be_instance_of(MessageDelivery)
> end
>
That makes sense for the cases when an object is yielded but what would
you do if no object is yielded and the block is just suppose to execute?
I guess you could do:
it "should yield the given block" do
some_method do
return 42
end.should == 42
end
But this does not look any better than the two previously suggested ways IMO.
> This still uses the contents of the blog to set an expectation, but is
> perhaps more expressive about the fact that we're not really
> interested in the contents of the block as much as we are what the end
> result is.
>
> WDYT?
>
In the case where the an object is yielded I do like you suggestion because it
covers everything. I just don't know about when no object is yielded.
I guess if a matcher is not possible I will have to settle for one of
the approaches above when no object is yielded.
Any more thoughts on the subject?
Thanks,
Ben
_______________________________________________
rspec-users mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/rspec-users