【问题标题】:Stubbing sleep method with Rspec.使用 Rspec 存根睡眠方法。
【发布时间】:2017-07-18 08:55:00
【问题描述】:

我的方法看起来像这样:

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

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

【问题讨论】:

标签: ruby-on-rails ruby rspec


【解决方案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 方法并阻止它在这些测试期间运行。

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-13
      • 1970-01-01
      • 2015-08-31
      • 1970-01-01
      • 2012-05-19
      • 1970-01-01
      • 1970-01-01
      • 2014-09-23
      相关资源
      最近更新 更多