2010/1/4 David Chelimsky <dchelim...@gmail.com>

> On Mon, Jan 4, 2010 at 2:57 PM, Andrew Premdas <aprem...@gmail.com> wrote:
>
>> 2009/12/30 Paul Hinze <paul.t.hi...@gmail.com>
>>
>> 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, and the
suggested refactorings were useful. Couldn't really make a patch as I don't
have the context to name things correctly.

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

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
>>> rspec-users@rubyforge.org
>>> http://rubyforge.org/mailman/listinfo/rspec-users
>>>
>>
>>
>> _______________________________________________
>> rspec-users mailing list
>> rspec-users@rubyforge.org
>> http://rubyforge.org/mailman/listinfo/rspec-users
>>
>
>
> _______________________________________________
> rspec-users mailing list
> rspec-users@rubyforge.org
> http://rubyforge.org/mailman/listinfo/rspec-users
>
_______________________________________________
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users

Reply via email to