Сбой теста из-за исключительной ситуации LocalJumpError (Ruby) - PullRequest
0 голосов
/ 07 августа 2011

Я думаю, что искал ответ о своей проблеме, но я не видел ни одного поста, который отвечал бы на нее.Итак, вот еще один вопрос о LocalJumpError ...

Я относительно новичок в 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?.Что мне не хватает?

Спасибо за ваши ответы.

1 Ответ

0 голосов
/ 07 августа 2011

Похоже, assert_nothing_raised ожидает блок в качестве аргумента.Вместо этого вы передаете результат вызова @logger.get_log('foo').Попробуйте это:

assert_nothing_raised do
  @logger.get_log('foo')
end
...