簡體   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