2

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

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

我只希望电话为零?发生一次,但我在我的 rspec 测试中遇到错误,说状态接收为零?两次。

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

添加“--backtrace”选项不起作用。

4

1 回答 1

4

尝试这样的事情:

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

于 2013-01-31T14:33:53.833 回答