On Tue, Jan 5, 2010 at 7:35 AM, Andrew Premdas <[email protected]> wrote:

> 2010/1/4 David Chelimsky <[email protected]>
>
> On Mon, Jan 4, 2010 at 2:57 PM, Andrew Premdas <[email protected]> wrote:
>>
>>> 2009/12/30 Paul Hinze <[email protected]>
>>>
>>> Given this simple cucumber feature (related to another rspec bug I am
>>>> working on):
>>>>
>>>>  http://gist.github.com/266335
>>>>
>>>> I'm fighting with this error messages that _only_ shows up in certain
>>>> situations that I can't quite pin down (rake features breaks, individual
>>>> cucumber run works, rake with debugger beforehand works...)
>>>>
>>>> > expected NoMethodError, got #<NameError: undefined local variable or
>>>> method `nap' for Time:Class
>>>> > ./features/step_definitions/stubs_dont_leak_steps.rb:10:in `/^nap time
>>>> should not be defined$/'
>>>> > features/either/stubs_dont_leak.feature:11:in `Then nap time should
>>>> not be defined'
>>>>
>>>> I've tracked it down to this line:
>>>>
>>>>
>>>> http://github.com/dchelimsky/rspec/blob/master/lib/spec/mocks/proxy.rb#L117
>>>
>>>
>>> This method is really unpleasant, perhaps some standard refactorings to
>>> remove the complex conditional conditions and remove the nested if's would
>>> be useful first of all.
>>>
>>
>> Agreed. Patches welcome!
>>
>
> David,
>
> I hope my comment didn't come out as sniping/bitchy/negative,
>

Absolutely not! You were spot on.


> and the suggested refactorings were useful.
>

I learned a lot about that code going through it.


> Couldn't really make a patch as I don't have the context to name things
> correctly.
>

Understood. Hopefully that will improve over time.


> Anyhow thanks once again for all your wonderful work on rspec and on this
> mailing list it really is very much appreciated.
>

Thank you for saying so. Appreciation is always appreciated :)

Cheers,
David


>
> All best
>
> Andrew
>
>
>>
>>
>>>   def message_received(sym, *args, &block)
>>>>    expectation = find_matching_expectation(sym, *args)
>>>>    stub = find_matching_method_stub(sym, *args)
>>>>
>>>>    if (stub && expectation && expectation.called_max_times?) || (stub &&
>>>> !expectation)
>>>>      if expectation = find_almost_matching_expectation(sym, *args)
>>>>        expectation.advise(args, block) unless
>>>> expectation.expected_messages_received?
>>>>      end
>>>>      stub.invoke(*args, &block)
>>>>    elsif expectation
>>>>      expectation.invoke(*args, &block)
>>>>    elsif expectation = find_almost_matching_expectation(sym, *args)
>>>>      expectation.advise(args, block) if null_object? unless
>>>> expectation.expected_messages_received?
>>>>      raise_unexpected_message_args_error(expectation, *args) unless
>>>> (has_negative_expectation?(sym) or null_object?)
>>>>    else
>>>> -->   @target.__send__ :method_missing, sym, *args, &block
>>>>    end
>>>>  end
>>>>
>>>> My question is this... why do we fall back to method_missing here rather
>>>> than a simple 'send' to the target?  I figure there is likely a reason,
>>>> so if someone could help me understand I'll happily open up my
>>>> expectation to should_raise(NameError) and move along. :)
>>>>
>>>> Cheers,
>>>>
>>>> Paul
>>>> _______________________________________________
>>>> rspec-users mailing list
>>>> [email protected]
>>>> http://rubyforge.org/mailman/listinfo/rspec-users
>>>>
>>>
>>>
>>> _______________________________________________
>>> rspec-users mailing list
>>> [email protected]
>>> http://rubyforge.org/mailman/listinfo/rspec-users
>>>
>>
>>
>> _______________________________________________
>> rspec-users mailing list
>> [email protected]
>> http://rubyforge.org/mailman/listinfo/rspec-users
>>
>
>
> _______________________________________________
> rspec-users mailing list
> [email protected]
> http://rubyforge.org/mailman/listinfo/rspec-users
>
_______________________________________________
rspec-users mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/rspec-users

Reply via email to