0
  • ルビー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 コンソールを実行するときに、メソッド名を から に変更foo1foo2、呼び出します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で動作するため)。

4

1 に答える 1