Ruby on Rails 2.3.8: Как настроить мои модульные тесты таким образом, чтобы при возникновении ошибки я мог печатать все переменные в текущей области? - PullRequest
3 голосов
/ 20 июня 2011

Допустим, я нахожусь в цикле for, и что-то в циклах for.

Как бы я настроил какой-то вид перехвата исключений, чтобы при неудачном тестировании все переменные были видны текущемуобласть видимости, включая индекс цикла, выводится на консоль?

Может быть, есть способ изменить метод, который ruby ​​использует для вывода всего текста ошибки на консоль?и включить все переменные в настоящее время в области видимости?

1 Ответ

0 голосов
/ 20 июня 2011

Хотя вы можете перебирать переменные @@class и @instance, насколько мне известно, обычные интерпретаторы Ruby не позволяют отображать все локальные переменные области. Это действительно просто конструкции в дереве разбора, и они не сохраняются, когда выпадают из области видимости. Кроме того, у вас может быть несколько локальных переменных с одним и тем же именем, но только самая верхняя будет видна в любой момент времени.

Возможно, вам придется определить свой собственный обработчик rescue, который выводит все переменные, которые вы пометили как интересующие вас. Либо это, либо экспериментируйте с использованием отладчика Ruby.

Альтернатива выглядит примерно так:

def clear_capture!
  @captured = nil
end

def capture(*args)
  (@captured ||= { }).merge(args)
end

def dump_capture
  puts @capture.inspect
end

В ваших тестах вы будете делать что-то вроде этого:

  def setup
    clear_captured!
  end

  def test_something
    foo = :foo
    bar = 12

    capture(:foo => foo, :bar => bar)

    # ...

    capture(:foo => foo, :other => other)

  rescue
    report_capture
  end

Вы можете улучшить это, используя eval, что сделает синтаксис более плотным.

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