2

当示例到达 break 语句时,我遇到了 LocalJumpError 的问题。有谁知道如何存根break,或者这是否是正确的方法?

方法:

def foo(file_name, limit)
  CSV.foreach(file_name, col_sep: "|") do |row|
    row_count += 1
    do something...
    break if row_count >= limit
  end
end

规格:

it 'does not exceed the limit' do
  CSV.should_receive(:foreach).with(file_name, col_sep: "|") do |&block|
      block.call(header_fields)
      block.call(data)
  end
  foo(file_name, 2)
end
4

1 回答 1

0

我可能会考虑做这样的事情作为集成类型的测试:

def foo(file_name, limit)
    CSV.read(file_name, col_sep: "|").each_with_index do |row, index|
      if index < limit
        #do something...
      end
    end
  end
end

it 'does not exceed the limit' do
  filename = 'path/to/file.csv'
  file = CSV.read(filename)
  file_length = file.size
  last_line = file.last

  output = foo(filename, file_length - 1)

  expect(output.last).to_not contain(last_line)
end

在此解决方案中,您仍会遍历 CSV 的每一行,但如果超出限制则忽略该行。这并不理想,但这是一种方法。

测试会将限制设置为比文件长度小一,然后检查最后一行是否已处理。

这个断言并不完全正确——这取决于你的# do something行动。

于 2013-06-04T17:29:14.160 回答