我正在测试一段Rails代码:
sleep(10.0)
在我的RSpec测试中,请致电:
Kernel.should_receive(:sleep).exactly(1).time
失败,测试睡了十秒钟。这使我得出结论,Rails程序中的sleep()
没有调用Kernel.sleep()
。我通过将我的Rails代码更改为:
Kernel.sleep(10.0)
...之后我的RSpec测试通过了(测试没有睡觉)。
这导致了一个特定的和一般性的问题:
答案 0 :(得分:9)
当您未指定显式接收器时,隐式接收器为self
,而不是Kernel
。 (你为什么这么想?)
所以,
sleep(10.0)
与
大致相同self.sleep(10.0)
和不与
完全相同Kernel.sleep(10.0)
因此,它正在self
上调用Kernel#sleep
而不是Kernel
。这意味着您需要对该特定方法中的任何对象self
设置期望。