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 のすべての行を反復処理しますが、制限を超えている場合はその行を無視します。理想的ではありませんが、1 つの方法です。

テストでは、制限をファイル長より 1 つ少なく設定し、最後の行が処理されたかどうかを確認します。

この主張は正しくありません。それはあなたの# do something行動次第です。

于 2013-06-04T17:29:14.160 に答える