3

当我对它们进行更改时,如何让 spork 重新加载我的共享示例?我尝试了以下方法,但没有重新加载它们:

Spork.each_run do
  Dir[Rails.root.join("spec/shared_examples/*.rb")].each {|f| require f}
end

我知道我可以在我的 Guardfile 中添加一个观察者,让它在共享示例更改时重新加载环境,但是我的应用程序很大,需要大约 10-15 秒才能重新加载整个环境:

watch(/^spec\/shared_examples\/.*\.rb$/)

我宁愿让它重新加载已更改的共享示例,以便我可以有一个更快的反馈循环。

4

3 回答 3

8

以下是您需要检查的几件事:

在环境配置文件test.rb中,确保你有这个

  config.cache_classes = !(ENV['DRB'] == 'true')

如果您在 Spork 环境中,这可以确保您不会缓存类。

然后,在确保这些在.each_run

FactoryGirl.reload
ActiveSupport::Dependencies.clear
ActiveRecord::Base.instantiate_observers

这应该确保您每次运行都重新加载类。

我还将在该.each_run部分中保留您的 share_examples 负载。

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 行的顺序来确保所有内容都正确加载。

于 2012-05-11T16:27:12.097 回答
3

结果我还在Spork.prefork 中加载了 shared_examples,并且由于某种原因导致它们每次运行都不会重新加载。从 Spork.prefork 中删除该行并仅将其放在 Spork.each_run 中修复了该问题,现在任何 shared_examples 的更改都会在测试运行时反映出来。

于 2012-05-14T00:23:41.203 回答
0
Spork.prefork do
  Dir[Rails.root.join("spec/shared_examples/*.rb")].each {|f| require f}
end
于 2012-05-11T16:23:09.107 回答