Ruby 当方法被意外调用的次数超过指定次数时,有没有办法从rspec获取堆栈跟踪?

Ruby 当方法被意外调用的次数超过指定次数时,有没有办法从rspec获取堆栈跟踪?,ruby,rspec,trace,expectations,Ruby,Rspec,Trace,Expectations,我设置了一个模拟对象,并告诉它期望检查nil并返回false: status = double('status') status.should_receive(:nil?).and_return(false) 我只希望电话是零?发生一次,但我在rspec测试中出错,说状态为零?两次 有没有办法让rspec显示每个呼叫发生的位置/方式 添加'-backtrace'选项无效。请尝试以下操作: status.should_receive(:nil?).twice { puts caller; fal

我设置了一个模拟对象,并告诉它期望检查nil并返回false:

status = double('status')
status.should_receive(:nil?).and_return(false)
我只希望电话是零?发生一次,但我在rspec测试中出错,说状态为零?两次

有没有办法让rspec显示每个呼叫发生的位置/方式


添加'-backtrace'选项无效。

请尝试以下操作:

status.should_receive(:nil?).twice { puts caller; false }
这告诉rspec允许两次调用,并每次调用关联的块。Caller方法会生成一个完整的回溯跟踪,您应该能够对其进行分析。我们还返回false以保持在我们正在测试的代码路径上

如果两个回溯很难区分,并且您只对第二个意外调用感兴趣,那么设置两个连续的预期:

status.should_receive(:nil?).and_return(false)
status.should_receive(:nil?) { puts caller; false }
这里,double将在第一次调用时返回false,并在第二次调用时调用块

设定期望响应的参考:

试试这样的方法:

status.should_receive(:nil?).twice { puts caller; false }
这告诉rspec允许两次调用,并每次调用关联的块。Caller方法会生成一个完整的回溯跟踪,您应该能够对其进行分析。我们还返回false以保持在我们正在测试的代码路径上

如果两个回溯很难区分,并且您只对第二个意外调用感兴趣,那么设置两个连续的预期:

status.should_receive(:nil?).and_return(false)
status.should_receive(:nil?) { puts caller; false }
这里,double将在第一次调用时返回false,并在第二次调用时调用块

设定期望响应的参考: