当我对其进行更改时,如何让spork重新加载我的共享示例?我尝试了以下内容,但它没有重新加载它们:
Spork.each_run do
Dir[Rails.root.join("spec/shared_examples/*.rb")].each {|f| require f}
end
我知道我可以在我的Guardfile中添加一个观察程序,让它在共享示例更改时重新加载env,但我的应用程序很大,需要大约10-15秒才能重新加载整个环境:
watch(/^spec\/shared_examples\/.*\.rb$/)
我更愿意让它重新加载已更改的共享示例,因此我可以有更快的反馈循环。
答案 0 :(得分:8)
以下是您需要检查的几件事:
在环境配置文件test.rb
中,请确保您拥有此
config.cache_classes = !(ENV['DRB'] == 'true')
如果您在Spork环境中,那么确保您不会缓存课程。
然后,确保它们在.each_run
FactoryGirl.reload
ActiveSupport::Dependencies.clear
ActiveRecord::Base.instantiate_observers
这应该确保你每次运行都重新加载类。
我还会将您的share_examples加载到.each_run
部分。
Spork.each_run do
FactoryGirl.reload
ActiveSupport::Dependencies.clear
ActiveRecord::Base.instantiate_observers
Dir[Rails.root.join("spec/shared_examples/*.rb")].each {|f| require f}
end
您可能需要使用.each_run
部分中4行的顺序来确保所有内容都正确加载。
答案 1 :(得分:3)
原来我还在Spork.prefork中加载了shared_examples,并且由于某些原因导致他们不为每次运行重新加载。从Spork.prefork中删除该行并仅在Spork.each_run中使用它修复了该问题,现在任何shared_examples的更改都会在测试运行时反映出来。
答案 2 :(得分:0)
Spork.prefork do
Dir[Rails.root.join("spec/shared_examples/*.rb")].each {|f| require f}
end