- ruby 2.3.1
- рельсы (3.2.22.4)
- rspec-рельсы (2.14.2)
- рельсы (0.3.2)
- pry-byebug (3.6.0)
- pry (0.10.4)
Я использую немного старую версию Ruby и Rails.
Я выполняю тесты RSpec в терминале Ubuntu:
rspec ./spec/features/some_spec.rb
и использую pry
точек останова (binding.pry
- внутри моих тестов RSpec).
Я пропалметод reload!
при отладке кода в этих точках останова (только для RSpec).(Я имею в виду динамическую перезагрузку измененного кода модели - например, добавление новых методов на лету и т. Д.) Этот метод даже там не определен.У меня есть метод reload!
, определенный и работающий в консоли Rails, но не в точке останова отладки RSpec.
Как настроить reload!
в RSpec?
Я пробовал решения на pry gem, как перезагрузить? , но у меня не получилось ни одного.
Похоже, что это наиболее близкое к реальному решению: https://stackoverflow.com/a/50966785/6594668, оно действительно определяет reload!
- но это reload!
ничего не делает.
Быстрый пример:
class User < ActiveRecord::Base
def foo1
p 123
end
end
Когда я запускаю консоль Rails, меняем имя метода с foo1
на foo2
, вызываем reload!
- тогда эти вызовы работают нормально:
User.first.foo1
=> 123
#change the method name (by manually editing the file)
User.first.foo2
=> 123
Но - когда я делаю то же самое в точке отладки RSpec - он фактически не перезагружает код - даже если я вручную определяю reload!
с помощью любого из2 способа:
1.https://stackoverflow.com/a/50966785/6594668
def reload!(print=true)
puts "Reloading..." if print
ActionDispatch::Reloader.cleanup!
ActionDispatch::Reloader.prepare!
true
end
2.https://github.com/rweng/pry-rails/issues/99#issuecomment-364272642
Object.send(:include, Rails::ConsoleMethods)
Похоже на то, что мне все еще не хватает (для reload!
для работы в RSpec).