- ルビー2.3.1
- レール (3.2.22.4)
- rspec レール (2.14.2)
- てこレール (0.3.2)
- pry-byebug (3.6.0)
- こじ開ける (0.10.4)
少し古いバージョンの Ruby と Rails を使用しています。
Ubuntu ターミナルで RSpec テストを実行しています。
rspec ./spec/features/some_spec.rb
ブレークポイントを使用していpry
ます ( binding.pry
- RSpec テスト内)。
これらのブレークポイントでコードをデバッグしているときにreload!
メソッドがありません (RSpec のみ)。(変更されたモデルコードを動的にリロードすることを意味します-オンザフライで新しいメソッドを追加するなど)。このメソッドはそこで定義されていません。Railsコンソールでメソッドを定義して動作させていますがreload!
、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で動作するため)。