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