当我使用Spork时,如何确保RSpec中的helpers和models重新加载?

8

看起来我的帮手(有时是我的模型)在使用Spork时没有被重新加载。我应该在“Spork.each_run”块中放置什么?

3个回答

8

我曾经遇到过同样的问题,所以我在每次运行时都设置了以下内容:

Spork.each_run do
  # This code will be run each time you run your specs.
  ActiveSupport::Dependencies.clear
  ActiveRecord::Base.instantiate_observers
  FactoryGirl.reload

  Dir[File.join(File.dirname(__FILE__), '..', 'app', 'helpers', '*.rb')].each do |file|
    require file
  end
end

此外,请不要忘记在您的config/environments/test.rb中添加以下内容:
config.cache_classes = !(ENV['DRB'] == 'true')

这对我有效:我的 helper 已经重新加载。但它导致控制器测试失败,出现奇怪的错误:Failure/Error: ActiveRecord::StatementInvalid: ArgumentError: prepare called on a closed database: rollback transaction # /Users/josh/.rvm/gems/ruby-1.9.3-p0@iq/gems/sqlite3-1.3.6/lib/sqlite3/database.rb:91:in initialize'` - Joshua Muheim
是的,我也一样 @JoshuaMuheim,你解决了吗? - Adam Waite

1
可能是因为您在prefork块中加载它们。如果您在那里加载这些内容,您的测试执行速度会更快,但有时需要重新加载。您可以在“each_run”块上加载,但测试速度会变慢。如果您喜欢速度,可以在需要重新加载时重新启动Spork服务器。这样,prefork块将再次运行,并且您的模型和助手将被重新加载。

好的,如果我想重新加载特定的集合,我只需要正常地引用它吗? - kfitzpatrick
我认为可以将它放在 each_run 块中。 - mornaner

-3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接