Rspec binding.pry из метода

Я пытаюсь использовать метод binding.pry и отлаживать его.

Упрощенный пример того, что я пытаюсь сделать.

привет.рб

class Hello
 def self.hello
  'Hello world!'
  binding.pry
 end
end

спец/hello_spec.rb

describe Hello do
 it 'Hello#hello should print message' do
  expect {Hello.hello}.to eq('Hello world!')
 end
end

Я хотел бы отладить метод self.hello, как я могу зарегистрировать этот метод с помощью binding.pry? Когда я пытаюсь запустить rspec hello_spec.rb, я не получаю консоль pry для отладки этого метода.


person AutoVit    schedule 22.09.2020    source источник
comment
Возникла какая-либо ошибка? Кстати, print вернет nil, поэтому expect {Hello.hello}.to eq('Hello world!') не удастся.   -  person spike 王建    schedule 22.09.2020
comment
Я обновил вопрос. В приведенном выше примере ошибок не возникло. Я ожидаю, что консоль pry откроется и сможет отладить этот метод. Я могу добавить binding.pry в метод rspec it, и он работает, как и ожидалось.   -  person AutoVit    schedule 22.09.2020
comment
Убедитесь, что вы также добавили pry драгоценных камней для группы :test.   -  person Salil    schedule 22.09.2020


Ответы (1)


Попробуйте изменить строку:

expect {Hello.hello}.to eq('Hello world!')

to:

expect Hello.hello.to eq('Hello world!')

и это должно работать. Другими словами, удалите скобки. Это сработало для меня.

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

person Mike    schedule 22.09.2020
comment
RSpecs expect можно использовать с () или {} (блочный синтаксис). При вызове с параметром параметр вызывается/обрабатывается перед eq (@AutoVit, это то, что вам нужно в вашем случае). Когда ожидание вызывается с синтаксисом блока, блок, вызванный во время eq. Из документов: последняя форма (блочная форма) необходим для сопоставления с конструкциями ruby, которые не являются объектами, но могут наблюдаться только при выполнении блока кода. Это включает в себя возникновение ошибок, выбрасывание символов, уступку и изменение значений. - person Thomas Koppensteiner; 28.10.2020