Помощь с Руби Коансом № 6 - Какое исключение было поймано? - PullRequest
10 голосов
/ 29 сентября 2010

Я пытаюсь выучить Руби с помощью Коанов, но я застрял на 6-м шаге.

Вот код:

def test_you_dont_get_null_pointer_errors_when_calling_methods_on_nil  
  # What happens when you call a method that doesn't exist.    
  # The following begin/rescue/end code block captures the exception and  
  # make some assertions about it.  

  begin
    nil.some_method_nil_doesnt_know_about
  rescue Exception => ex
    # What exception has been caught?
    assert_equal __, ex.class

    # What message was attached to the exception?
    # (HINT: replace __ with part of the error message.)
    assert_match(/__/, ex.message)
  end
end

Я знаю, что должен заменить __ чем-то, что связано с сообщением об ошибке "NoMethodError", но я не могу понять это,

Это сообщение об ошибке, которое я получаю, когда запускаю «path_to_enlightenment.rb»:

The answers you seek...
  <"FILL ME IN"> expected but was  <NoMethodError>.

Я был бы очень признателен за это - это сводит меня с ума!Я хотел бы знать ответ и возможное объяснение.Спасибо!

Ответы [ 9 ]

12 голосов
/ 29 сентября 2010

Ответ здесь "NoMethodError"

вам нужно, чтобы элементы по обе стороны от были равны, поэтому сделать их обоих ex.class сделает это.

Тогда вам нужно перейти к / __ / ниже.

4 голосов
/ 26 мая 2011

Мне нужно было поместить выражение assert_equal в парены, чтобы это пропустить. Должно быть ошибка.

  def test_you_dont_get_null_pointer_errors_when_calling_methods_on_nil
    # What happens when you call a method that doesn't exist.  The
    # following begin/rescue/end code block captures the exception and
    # make some assertions about it.
    begin
      nil.some_method_nil_doesnt_know_about
    rescue Exception => ex
      # What exception has been caught?
      assert_equal(NoMethodError, ex.class)

      # What message was attached to the exception?
      # (HINT: replace __ with part of the error message.)
      assert_match("undefined method", ex.message)
    end
  end
3 голосов
/ 20 февраля 2012

Вам нужно заменить __ фактическим

assert_equal NoMethodError, ex.class 
1 голос
/ 31 июля 2014

Для строки 20 я использовал это: assert_match(/some_method_nil_doesnt_know_about/, ex.message) Я не знаю, для чего эти символы "/".Я должен исследовать это, но это сработало.

Я думаю, уловка была в том, что some_method_nil_doesnt_know_about был в одинарных кавычках в сообщении, поэтому он искал это.

1 голос
/ 30 июля 2014

Я только что решил это.Я сосредоточился на одной строке за раз, но этот метод включает в себя два элемента, которые нужно изменить, один в строке 16, один в строке 20. Оба должны пройти урок.

20: assert_match(/*some_method_nil_doesnt_know_about*/, ex.message)

Надеюсь, это поможет кому-то, кто застрянет!

1 голос
/ 25 октября 2012

Карло Ледесма имеет правильный ответ. (assert_equal NoMethodError, ex.class) Не знаю, почему ответ Эллиота имеет самый высокий рейтинг, если кто-то просит вас решить уравнение, 2x + 2 = 10, вы не отвечаете 2x + 2 = 2x + 2. Математически вы были бы правы, но это не ответ.

0 голосов
/ 12 декабря 2017

Если вы удалите кавычки, вы можете добавить бит сообщения об ошибке

assert_match(/undefined method/, ex.message)
0 голосов
/ 06 октября 2011

когда вы заполняете NoMethodError, вам также необходимо заполнить сообщение об ошибке (что-то вроде «undefined method 'some_methd ..»), вы должны заменить все / __ / вашим термином, а не только подчеркиванием

0 голосов
/ 15 апреля 2011

Я только на Коен 83, но в большинстве Коенов вы можете найти «ответ» в разделе, озаглавленном «The answers you seek...», сразу после «<"FILL ME IN"> expected but was». Время от времени я нарушал фреймворк RubyKoan и получал эту старую графику ascii (я не уверен, что это должны быть руки с кистями или дерево, но, надеюсь, вы узнаете об этом, когда увидите); в этих случаях было полезно сообщение об ошибке под графикой ascii.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...