我的方法看起来像这样:
until panel_import.completed?
panel_import.update_status
sleep 1.minute
end
现在,当我运行我的规格时,我必须等待1分钟,这是不好的。我该如何存根?我正在阅读很多主题,但我没有找到解决方案......
答案 0 :(得分: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?
,并将sleep
作为@MilesStanfield建议,但我总是尽量避免在我的常规代码中使用与我的测试相关的代码
答案 1 :(得分:0)
如果是我,我只需添加一个Rails.env.test?
,这样您的测试就不会进行睡眠调用。像这样......
until panel_import.completed?
panel_import.update_status
sleep 1.minute unless Rails.env.test?
end