Ruby on rails 3.1 如何使用Spork、RSpec和;黄瓜?

Ruby on rails 3.1 如何使用Spork、RSpec和;黄瓜?,ruby-on-rails-3.1,rspec,cucumber,spork,Ruby On Rails 3.1,Rspec,Cucumber,Spork,我在RSpec有好几年的问题,我的模型在Spork运行之间没有重新加载 我最终通过更改config/environments/test.rb中的以下行解决了这个问题: config.cache_classes = true ActiveSupport::Dependencies.clear FactoryGirl.reload 变成 config.cache_classes = false 然而。。。虽然这解决了RSpec的问题,Cucumber要求将cache_类设置为true。 是否

我在RSpec有好几年的问题,我的模型在Spork运行之间没有重新加载

我最终通过更改
config/environments/test.rb
中的以下行解决了这个问题:

config.cache_classes = true
ActiveSupport::Dependencies.clear
FactoryGirl.reload
变成

config.cache_classes = false
然而。。。虽然这解决了RSpec的问题,Cucumber要求将cache_类设置为true

是否有一个规范的解决方案可以同时适用于RSpec和Cucumber,并且可以成功地重新加载RSpec模型

脚注

*我为使RSpec重新加载模型而实现的其他更改包括将以下行添加到
spec\u helper.rb

config.cache_classes = true
ActiveSupport::Dependencies.clear
FactoryGirl.reload

如果不设置
cache\u classes=true
line,这些行都无法解决问题。

我遇到了这个问题,对我来说,这是由于Rails的线程安全模式。确保config.threadsafe!在我的测试环境中没有调用,请为我修复它。这是因为threadsafe模式防止在每个请求上重新加载代码,并禁用自动依赖项加载,我猜spork在每次运行时都依赖于此

我打电话给config.threadsafe!在application.rb中,所以我从那里删除了该调用,并将其放在development.rb和production.rb中。现在我可以将config.cache_类设置为true,rspec和cucumber在spork下愉快地工作。注意,我在持久层和Machinist中使用了Mongoid,而不是FactoryGirl


另请参见

我从未需要关闭类缓存来让spork正常工作。我确实记得有一次,使用
factory.define:foo,:class=>foo
定义工厂会阻止重新加载foo类。指定类名而不是实际的类修复了这一问题。Factory girl和模型重新加载问题之间似乎存在关联。你说“指定一个类名而不是实际修复的类”是什么意思?与其说:class=>Foo,不如说:class=>'Foo'(或者:class_name=>'Foo”-我不记得了我会玩一玩的——事实上,我已经发现了这个问题,甚至与工厂女孩宝石的出现无关。谢谢你。我暂时不能对此发表评论,因为我已经放弃了一段时间的测试!不过,我回来后会再看一眼:)