- 红宝石 2.3.1
- 导轨 (3.2.22.4)
- rspec-rails (2.14.2)
- 撬轨 (0.3.2)
- 撬拜虫(3.6.0)
- 撬 (0.10.4)
我使用的是旧版本的 Ruby 和 Rails。
我在 Ubuntu 终端中运行 RSpec 测试:
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!
用两种方式中的任何一种手动定义:
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 中工作)。