是否可以使用Rspec?,Ruby为无限循环问题编写规范

时间:2014-08-13 11:55:10

标签: ruby rspec

听我在这里有一个有趣的问题,前几天我遇到了使用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

2 个答案:

答案 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