[英]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.