0

我在 RSpec 中遇到了很长时间的问题,因为我的模型在 Spork 运行之间没有重新加载。

我最终通过更改以下行来解决此问题config/environments/test.rb

config.cache_classes = true

变成了

config.cache_classes = false

但是......虽然这解决了 RSpec 的问题,但 Cucumber 要求将 cache_classes 设置为truehttps://rspec.lighthouseapp.com/projects/16211/tickets/165

是否有适用于 RSpec 和 Cucumber 并成功重新加载 RSpec 模型的规范解决方案?

脚注

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

ActiveSupport::Dependencies.clear
FactoryGirl.reload

如果没有设置cache_classes=true线,这些线都没有解决问题。

4

1 回答 1

2

我遇到了这个问题,对我来说这是由于 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

于 2012-07-20T03:49:02.350 回答