rspec单元测试具有无限循环的方法

Sha*_*tel 4 unit-testing rspec

我有这样的方法

class SomeClass
  def self.test_method
    while(true)
      make_heavy_lifting
      sleep(60*60)
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

我该如何为这种方法编写测试.

我想到的一个解决方案是存根睡眠方法,它工作但我无法存根while关键字.请建议单元测试具有无限循环的方法的最佳实践.

ari*_*uod 6

也许你可以将除了睡眠之外的所有内容移动到另一种方法,然后你只为该方法编写规范,我认为你真的不需要测试你的方法有一个while循环和一个睡眠(你不需要测试你的代码的每一行:P)但如果你想这样做检查这个问题,它有一些你可以尝试的东西什么是测试"无限循环"的最佳实践?


sto*_*her 5

为了测试这个,我存根:loop并使用它而不是while(true)

班级:

class SomeClass
  def self.test_method
    loop do
      make_heavy_lifting
      sleep(60*60)
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

规格:

describe SomeClass do
  describe '#test_method' do
    expect(SomeClass).to receive(:loop).and_yield
    expect(SomeClass).to receive(:make_heavy_lifting)
    expect(SomeClass).to receive(:sleep).with(60*60)
end
Run Code Online (Sandbox Code Playgroud)

这样它只会迭代一次。

编辑:似乎在另一个问题中也建议了这一点