繁体   English   中英

使用 Rspec 的存根睡眠方法。

[英]Stubbing sleep method with Rspec.

我有看起来像这样的方法:

until panel_import.completed?
  panel_import.update_status
  sleep 1.minute
end

现在,当我运行我的规范时,我必须等待 1 分钟,这很糟糕。 我怎样才能存根? 我正在阅读许多主题,但没有找到解决方案......

正如@Rubyrider提到的,这个链接提供了很好的帮助: RSpec: stubbing Kernel::sleep?

总结该答案,您可以允许调用sleep的类接收sleep方法:

# Class that calls `sleep`
class Foo
  def run
    sleep 5
  end
end

# Specs
...
describe '#run' do
  before { allow_any_instance_of(Foo).to receive(:sleep) }

  # your tests
end

这将模拟 sleep 方法并阻止它在这些测试期间运行。

虽然你也可以检查Rails.env.test? 在您按照@MilesStanfield 的建议调用sleep代码中,我总是尽量避免在我的常规代码中包含与我的测试相关的代码。

如果是我,我会添加一个Rails.env.test? 所以你的测试不会运行睡眠调用。 像这样 ...

until panel_import.completed?
  panel_import.update_status
  sleep 1.minute unless Rails.env.test?
end

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM