我设置了一个模拟对象并告诉它期望检查nil并返回false:
status = double('status')
status.should_receive(:nil?).and_return(false)
我只希望打电话给零?发生一次,但我的rspec测试中有一个错误,说状态收到零?两次。
有没有办法让rspec显示每次调用的发生位置和方式?
添加'--backtrace'选项不起作用。
答案 0 :(得分:1)
尝试这样的事情:
status.should_receive(:nil?).twice { puts caller; false }
这告诉rspec允许两次调用并每次调用相关的块。 caller
方法生成完整的回溯,您应该能够在stdout
上进行分析。我们还返回false
以继续我们正在测试的代码路径。
如果两个回溯难以区分,而您只对第二个(意外)调用感兴趣,那么设置两个连续的期望:
status.should_receive(:nil?).and_return(false)
status.should_receive(:nil?) { puts caller; false }
这里double将在第一次调用时返回false,并在第二次调用时调用该块。
参考设定对期望的回应:
https://github.com/rspec/rspec-mocks#setting-responses