#ruby #debugging #rspec #rubygems #pry
Вопрос:
У меня есть проект, в котором размещается привязка.pry будет работать при выполнении тестов RSpec, за исключением классов, в которых мы используем общий пример. Мы настроили его так, чтобы в нем было два блока, один в самом классе, который обрабатывает ошибки, а другой в общем примере. Структура выглядит так (извините, я не могу уточнить, там много кода):
Класс -> (Код, окруженный блоком)
require 'pry'
def class(param, param)
ClassThatTakesBlock.handle() do |_some_event|
rest of class's code...
binding.pry # Fails dramatically when running RSpec
...
end
end
end
Общий пример -> (Код, окруженный блоком)
RSpec.shared_examples 'some class' do |optional_param1, optional_param2|
subject { class(param: param_hash, param: param) }
...
end
end
Спецификация класса ->
RSpec.describe 'directory/class' do
it_behaves_like 'some class', false do
...
end
end
Проблема в том, что когда мне требуется «подглядывать» и я пытаюсь разместить binding.pry и запустить спецификацию, которая проходит мимо этой привязки.подглядывать, спецификация выдаст кучу ошибок с чем-то вроде
Failure/Error: subject { class(param: param_hash, param: param) }
(Строка темы общего примера)
expected: ("AWS param in class")
got: ("DISABLE_PRY")
Please stub a default value first if message might be received with other args as well.
Shared Example Group: "some class" called from ./file_directory/path/class_spec.rb:40
Наряду с большой стеной из того, что выглядит как парамы, дорожки для пакетов, флаги rvm и т. Д.
Есть ли что-то особенное, что мне нужно сделать, чтобы получить привязку?подглядывать за работой в общем примере? Или есть другой способ разместить отладчик в коде? Я даже не могу вывести инструкции печати на поверхность, когда запускаю RSpec, и я не могу отладить свои спецификации.
Комментарии:
1.
binding.pry
обычно хорошо работает в общем примере. Я не ожидаю, что здесь проблема в этом. Я предполагаю , что сумасшедшая ошибка вызвана определением вызываемого методаclass
, который конфликтует с зарезервированным словомclass
? Это очень странный поступок…
Ответ №1:
имя метода class
вызывает проблему, потому что ключевое class
слово зарезервировано в ruby. Мое предложение — назвать его классом.
Ответ №2:
Я считаю, что проблема, с которой я столкнулся, заключалась в неправильном нанесении ударов. Добавление
allow(ENV).to receive(:[])
исправлено, но я также думаю, что отключение stdout также вызывало проблемы.