如何使用Spork、RSpec & 解决cache_clases = true/false 冲突黄瓜?
我在 RSpec 中遇到了很长时间的问题,因为我的模型在 Spork 运行之间没有重新加载。
我最终通过更改 config/environments/test.rb 中的以下行解决了这个问题:
config.cache_classes = true
然而
config.cache_classes = false
...虽然这解决了 RSpec 的问题,但 Cucumber 要求将 cache_classes 设置为 true< /强>。 https://rspec.lighthouseapp.com/projects/16211/tickets/165
是否有一个适用于 RSpec 和 Cucumber 并成功重新加载 RSpec 模型的规范解决方案?
脚注
* 我为使 RSpec 重新加载模型而实现的其他更改包括将以下行添加到 spec_helper.rb
:
ActiveSupport::Dependencies.clear
FactoryGirl.reload
如果不设置 cache_classes,这些行都无法解决问题=true
行。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我遇到了这个问题,对我来说这是由于 Rails 的线程安全模式造成的。确保config.threadsafe!在我的测试环境中没有被调用,为我修复了它。这是因为线程安全模式会阻止代码在每个请求上重新加载,并禁用自动依赖项加载,我猜 spork 在each_run 中依赖于此。
我正在调用 config.threadsafe!在 application.rb 中,所以我从那里删除了该调用,并将其放在development.rb 和 Production.rb 中。现在我可以将 config.cache_classes 设置为 true,并且 rspec 和 cucumber 在 spork 下愉快地工作。请注意,我在持久层和 Machinist 中使用 Mongoid,而不是 FactoryGirl,所以 YMMV。
另请参阅http://rickyrobinson.id.au/2012/07/20/when-spork-puts-a-fork-in-your-cucumber-and-a-spanner-in-your-specs< /a>
I had this problem, and for me it was due to Rails' threadsafe mode. Ensuring config.threadsafe! is not called in my test environment fixed it for me. This is because threadsafe mode prevents code from reloading on each request and disables automatic dependency loading, which I guess spork was relying on in each_run.
I was calling config.threadsafe! in application.rb, so I removed that call from there, and put it in development.rb and production.rb instead. Now I can leave config.cache_classes set to true, and rspec and cucumber work happily under spork. Note that I was using Mongoid in my persistence layer and Machinist instead of FactoryGirl so YMMV.
See also http://rickyrobinson.id.au/2012/07/20/when-spork-puts-a-fork-in-your-cucumber-and-a-spanner-in-your-specs