Rails使用什么sleep()?

时间:2012-07-03 11:51:14

标签: ruby ruby-on-rails-3

我正在测试一段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)?
  • 从解释器中,找到任何函数源代码的最简单方法是什么?

1 个答案:

答案 0 :(得分:9)

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

所以,

sleep(10.0)

大致相同
self.sleep(10.0)

完全相同
Kernel.sleep(10.0)

因此,它正在self上调用Kernel#sleep而不是Kernel。这意味着您需要对该特定方法中的任何对象self设置期望。