Ah good, thanks for the correction
On Nov 15, 2013 1:13 PM, "Myron Marston" <[email protected]> wrote:

> I believe the expectation matchers also now support === in RSpec 3.
>
>
> Not yet.  Still on the list, but we haven't implemented it yet.
>
> That said, some matchers (such as the `yield` matchers) have supported
> `===` for a long time.  In fact, that's how Maurizio's original example
> worked:
>
> expect { |b| described_class.new &b }.to yield_with_args described_class
>
> Class#=== returns true when given an instance of the class.  No
> `instance_of` needed.
>
> However, Maurizio specifically said:
>
> But it tests only the yield argument type, not the object identity.
>
>
> Myron
>
> On Friday, November 15, 2013 9:53:02 AM UTC-8, Aaron Kromer wrote:
>>
>> Though that's not as explicit as Myron's example. I'd probably go with
>> his.
>>
>>
>> On Fri, Nov 15, 2013 at 12:52 PM, Aaron Kromer <[email protected]>wrote:
>>
>>> I believe the expectation matchers also now support === in RSpec 3. So
>>> you could write it as:
>>>
>>> it "works using expectation matcher" do
>>>   expect{ |b| Foo.new(&b) }.to yield_with_args instance_of Fooend
>>>
>>>
>>>
>>> On Fri, Nov 15, 2013 at 10:59 AM, Myron Marston <[email protected]>wrote:
>>>
>>>> Thanks for trying out the 3.0 beta :).
>>>>
>>>> The yield matchers try to match the args with both `===` (for case
>>>> equality) and `==` (for exact equality) and in 1.9+, lambda's respond to
>>>> `===` by invoking their logic.  So while it's a bit of a hack, this works:
>>>>
>>>> it 'works using a lambda' do
>>>>   instance = nil
>>>>   equals_the_instance = ->(arg) { arg.equal?(instance) }
>>>>   expect { |b|
>>>>     instance = Test.new(&b)
>>>>   }.to yield_with_args(equals_the_instance)
>>>> end
>>>>
>>>> It works because passing the lambda causes it to be lazily evaluated.
>>>>
>>>> That said, I don't think the `yield_with_args` matcher offers you much
>>>> advantage in this case.  It's simpler to do this:
>>>>
>>>> it 'works without the matcher' do
>>>>   yielded = []
>>>>   instance = Test.new { |a| yielded << a }
>>>>   expect(yielded).to eq([instance])
>>>> end
>>>>
>>>> HTH,
>>>> Myron
>>>>
>>>> On Friday, November 15, 2013 2:36:20 AM UTC-8, Maurizio De Santis wrote:
>>>>>
>>>>> Hello,
>>>>>
>>>>> I'm using rspec 3.0.0.beta1. I'm trying to test for yield self.
>>>>> Example:
>>>>>
>>>>> class Test
>>>>>   def initialize
>>>>>     yield self if block_given?
>>>>>   end
>>>>> end
>>>>>
>>>>> I can't figure out how to test it. This is the closest successful test
>>>>> I wrote:
>>>>>
>>>>>  describe Test do
>>>>>   context 'giving a block with one argument' do
>>>>>     it 'yields itself'
>>>>>       expect { |b| described_class.new &b }.to yield_with_args
>>>>> described_class
>>>>>     end
>>>>>   end
>>>>> end
>>>>>
>>>>> But it tests only the yield argument type, not the object identity.
>>>>>
>>>>> This is a failing test that goes close to the wanted result:
>>>>>
>>>>> describe Test do
>>>>>   context 'giving a block with one argument' do
>>>>>     it 'yields itself'
>>>>>       instance = nil
>>>>>       expect { |b|
>>>>>         instance = described_class.new &b
>>>>>       }.to yield_with_args instance
>>>>>     end
>>>>>   end
>>>>> end
>>>>>
>>>>> Indeed it fails, since that at the time that the last instanceoccurrence 
>>>>> is evaluated its value is
>>>>> nil, so it doesn't match with instance value at the block evaluation
>>>>> time.
>>>>>
>>>>> Do you have some ideas about?
>>>>>
>>>>> Thank you
>>>>>
>>>>  --
>>>> You received this message because you are subscribed to the Google
>>>> Groups "rspec" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>> an email to [email protected].
>>>> To post to this group, send email to [email protected].
>>>> To view this discussion on the web visit https://groups.google.com/d/
>>>> msgid/rspec/2fea7ccd-d18b-48c4-a47b-aa1baa7c307f%40googlegroups.com.
>>>>
>>>> For more options, visit https://groups.google.com/groups/opt_out.
>>>>
>>>
>>>
>>  --
> You received this message because you are subscribed to the Google Groups
> "rspec" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/rspec/4f0ef1ac-065b-4e31-ac22-a986ac126f8e%40googlegroups.com
> .
> For more options, visit https://groups.google.com/groups/opt_out.
>

-- 
You received this message because you are subscribed to the Google Groups 
"rspec" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/rspec/CAKCESdhQy935tShBcjuhdAPszo8-DciqqC71RsJjB5PhZ%3D7j3Q%40mail.gmail.com.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to