ruby – Rails使用什么sleep()?

我正在测试一段Rails代码
sleep(10.0)

在我的RSpec测试中,调用

Kernel.should_receive(:sleep).exactly(1).time

失败了,测试睡了十秒钟.这使我得出结论,Rails程序中的sleep()不会调用Kernel.sleep().我通过将我的Rails代码更改为:

Kernel.sleep(10.0)

…之后我的RSpec测试通过了(测试没有睡觉).

这导致了一个具体的和一般性的问题:

> Rails使用什么sleep()实现(我正在运行Ruby 1.9.3 / Rails 3.2.1)?
>从解释器中,找到任何函数代码的最简单方法是什么?

解决方法

当您未指定显式接收器时,隐式接收器是self,而不是Kernel. (你为什么那么想?)

所以,

sleep(10.0)

大致相同

self.sleep(10.0)

并没有完全一样

Kernel.sleep(10.0)

因此,它在自己上调用Kernel#sleep而不在内核上调用.这意味着您需要对该特定方法中的任何对象设置期望.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...