当方法被意外调用的次数超过指定次数时,有没有办法从 rspec 获取堆栈跟踪?
Posted
技术标签:
【中文标题】当方法被意外调用的次数超过指定次数时,有没有办法从 rspec 获取堆栈跟踪?【英文标题】:Is there a way to get a stack trace from rspec when a method is unexpectedly called more times than specified? 【发布时间】:2013-01-31 13:10:27 【问题描述】:我设置了一个模拟对象并告诉它检查 nil 并返回 false:
status = double('status')
status.should_receive(:nil?).and_return(false)
我只希望调用为零?发生一次,但我在 rspec 测试中遇到错误,说状态接收为零?两次。
有没有办法让 rspec 显示每次调用发生的位置/方式?
添加“--backtrace”选项不起作用。
【问题讨论】:
【参考方案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
【讨论】:
以上是关于当方法被意外调用的次数超过指定次数时,有没有办法从 rspec 获取堆栈跟踪?的主要内容,如果未能解决你的问题,请参考以下文章