Привязка.ошибка при попытке доступа в блоке общего примера?

#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 также вызывало проблемы.