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! > 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
