【发布时间】:2012-01-08 08:43:32
【问题描述】:
似乎我的助手(有时是我的模型)在每次使用 Spork 运行时都没有重新加载。我应该在“Spork.each_run”块中添加什么?
【问题讨论】:
标签: ruby-on-rails rspec helpers rspec-rails spork
似乎我的助手(有时是我的模型)在每次使用 Spork 运行时都没有重新加载。我应该在“Spork.each_run”块中添加什么?
【问题讨论】:
标签: ruby-on-rails rspec helpers rspec-rails spork
我从来没有遇到过这些问题,也许是因为我也在使用 Ryan Bates 的 RailsCast 中描述的 Guard gem?
【讨论】:
我遇到了同样的问题,所以我在 each_run 块中设置了这个:
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')
【讨论】:
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'`
这可能是因为您在 prefork 块中加载了它们。如果你在那里加载东西,你的测试运行得更快,但有时你需要重新加载。您可以加载“each_run”块,但测试会更慢。如果您更喜欢速度,您可以在看到需要重新加载时重新启动 Spork 服务器。这样,prefork 块将再次运行,您的模型和助手将被重新加载。
【讨论】: