没有。我们的规范助手中有 spork 并且我们不经常使用它,因为它会减慢整个较大套件的测试速度。我们只在快速迭代时运行 spork,在 TDD 期间重复运行一小部分测试。当 spork 没有运行时,我们根本不将 --drb 选项传递给 RSpec,一切都在没有 Spork 的情况下运行。明显的 Spork 就在那里,但除非我们启动它并使用 --drb 运行我们的规范,否则它不会被使用。
如果您不想要 prefork 块和其他东西,请在执行它们之前设置一个环境变量,这样如果它们给您带来问题,您可以有条件地绕过它们。
编辑 |我刚刚将我们的规范助手拆分为多个文件,因此当我们不运行 Spork 时根本不会加载 prefork 块。这不是必需的,但我是这样做的。
spec_helper.rb 在进行快速环境检查后加载两个不同文件之一)
ENV["RAILS_ENV"] ||= 'test'
# Conditional Spork.prefork (this comment is needed to fool Spork's `bootstrapped?` check)
if /spork/i =~ $0 || RSpec.configuration.drb?
require File.expand_path("../spec_helper_spork", __FILE__)
else
require File.expand_path("../spec_helper_base", __FILE__)
end
spec_helper_base.rb 只是没有 Spork 的原始 spec_helper 的副本(如果删除 Spork,您可以将其重命名)
ENV["RAILS_ENV"] ||= 'test'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'
require 'database_cleaner'
# Load all .rb helper files under the support/ directory
Dir[Rails.root.join("spec/support/**/*.rb")].each { |file| require file }
RSpec.configure do |config|
# ... the usual stuff ...
end
最后,spec_helper_spork.rb 只是 spec_helper_base.rb 的一个包装器
require 'spork'
Spork.prefork do
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'
require 'database_cleaner'
end
Spork.each_run do
$rspec_start_time = Time.now
require File.expand_path("../spec_helper_base", __FILE__)
end
spec_helper_spork.rb 加载的唯一时间是:
a) 调用spork 命令
b) 使用 --drb 选项运行您的规范
这对我来说很好用。不过,我怎么强调都不过分,这不是必需的。只要您没有通过--drb 选项,您的规格将在没有运行 spork 的情况下运行良好。我确实喜欢让它完全从我们的规范助手中分离出来,因为我已经这样做了。