Я думаю, что искал ответ о своей проблеме, но я не видел ни одного поста, который отвечал бы на нее.Итак, вот еще один вопрос о 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?
.Что мне не хватает?
Спасибо за ваши ответы.