Given this simple cucumber feature (related to another rspec bug I am
working on):
stubs_dont_leak.feature · GitHub
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:
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