[英]RSpec. How to test method with nested private method (mocking/stubbing)?
[英]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.