当方法被意外调用的次数超过指定次数时,有没有办法从 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 获取堆栈跟踪?的主要内容,如果未能解决你的问题,请参考以下文章

碧育游戏登陆时错误次数过多导致被阻止登陆要等多久才可以再次登陆5

java如何实现限制一个接口每天被调用次数为5次?

关于单击浏览器统计次数问题分析

ORA-28000 账号被锁定的解决办法

java定时器 限制方法调用次数

有没有办法限制 php 表单的提交次数?