0

私の問題に関する回答を検索したと思いますが、それに回答する投稿はありませんでした。LocalJumpError に関するもう 1 つの質問があります...

私は Ruby の比較的初心者であり、コーディングするすべての Ruby の前に、適切なプラクティスに従ってテストを作成することにしました。

しかし、ここで私には理解できない小さな問題のようなものがあります。ここに私のテストがあります:

class TestFilesInfoLoggerHashCreation < Test::Unit::TestCase
   def setup
      @logger = FilesInfoLogger
   end
   # some other tests
   def test_shall_not_raise_an_exception_if_argument_is_a_string
     assert_nothing_raise @logger.get_log('foo')
   end
end

上記の特定のテストを検証するためのコードは次のとおりです。

module FilesInfoLogger
  extend self
  def get_log(list)
     hash = Hash.new {||h,k| h[k] = (block_given?)? yield(k):''}
     if list.respond_to? :each 
       list.each {|file| hash[file]}
     else
       ([]<< list).each {|file| hash[file]}
     end
  end
end

したがって、FilesInfoLogger.get_log('foo')irb を実行すると、すべてが正常に動作しているように見えます。つまり、何も発生していません。しかし、テストを実行すると、これを返すのに失敗します:

test_shall_not_raise_an_exception_if_argument_is_a_string(TestFilesInfoLoggerHashCreation) [test/files_info_logger_test.rb:43]:
{"foo"=>""}.
 Exception raised:
 <#<LocalJumpError: no block given (yield)>>.

特にblock_given?. 私は何が欠けていますか?

回答ありがとうございます。

4

1 に答える 1

0

assert_nothing_raised引数としてブロックを期待しているようです。代わりに、を呼び出した結果を渡します@logger.get_log('foo')。これを試して:

assert_nothing_raised do
  @logger.get_log('foo')
end
于 2011-08-07T13:16:57.083 に答える