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
