听我在这里有一个有趣的问题,前几天我遇到了使用Rspec的“无限循环”问题,Rspec甚至无法通过与循环内其他方法相关的规范,甚至comp也差不多了崩溃。非常有趣。
我想针对无限循环代码测试我未来的循环(在本例中为while循环)。 我怎样才能测试这个循环并赶上这个问题并进行适当的修正?
谢谢!
这是我其他日子的代码:
i = 0
while i <= Video.all.count do
if ( @sampler = Video.find_next_sampler(@samplers[-1].end_time, @samplers[-1].end_point) )
@samplers << @sampler
else
flash[:error] = 'There is not any more match for this video-sampler'
end
i + 1 #Now Here is the bug!! IT should be: i += 1
end
答案 0 :(得分:3)
require 'timeout'
it 'should not take too long' do
Timeout.timeout(20) do
... blah ...
end
end
甚至
# spec_helper.rb
require 'timeout'
RSpec.configure do |c|
c.around(:example, finite: true) do |example|
Timeout.timeout(20) do
example.run
end
end
end
# my_spec.rb
it "should work really fast", finite: true do
... blah ...
end
答案 1 :(得分:0)
在这个特定的例子中,运行循环比数据库中所有视频的总数更频繁是没有意义的。
因此我会尝试这样的事情:
let(:videos_count) { Video.count }
before do
allow(Video).to receive(:find_next_sampler).and_call_original
end
it 'is not an infinite loop' do
except(Video).to receive(:find_next_sampler).at_most(videos_count).times
# call your method
end