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

时间:2013-01-31 13:10:27

标签: ruby rspec trace expectations

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

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

我只希望打电话给零?发生一次,但我的rspec测试中有一个错误,说状态收到零?两次。

有没有办法让rspec显示每次调用的发生位置和方式?

添加'--backtrace'选项不起作用。

1 个答案:

答案 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