Is there a way to get a stack trace from rspec when a method is unexpectedly called more times than specified?

StackOverflow https://stackoverflow.com/questions/14626576

سؤال

I setup a mock object and told it to expect a check for nil and to return false:

status = double('status')
status.should_receive(:nil?).and_return(false)

I only expect the call to nil? to occur once, but I got an error in my rspec test, saying that status received nil? twice.

Is there a way to get rspec to show where/how each call occurred?

adding the '--backtrace' option did not work.

هل كانت مفيدة؟

المحلول

Try something like this:

status.should_receive(:nil?).twice { puts caller; false }

This tells rspec to allow two invocations and call the associated block each time. Thecaller method generates a full backtrace which you should be able to analyze onstdout. We also returnfalse to stay on the code-path we're testing.

If the two backtraces are hard to distinguish and you're only interested in the second (unexpected) invocation, then set up two successive expectations:

status.should_receive(:nil?).and_return(false)
status.should_receive(:nil?) { puts caller; false }

Here the double will return false on the first invocation and call the block on the second.

Reference for setting responses on expectations:
https://github.com/rspec/rspec-mocks#setting-responses

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top