Хотя вы можете перебирать переменные @@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
, что сделает синтаксис более плотным.