Bra*_*and 6 ruby rspec ruby-on-rails spork
如果我在我的rails项目中使用spork并且有这样的spec_helper.rb文件
require 'spork'
Spork.prefork do
...
end
Spork.each_run do
...
end
Run Code Online (Sandbox Code Playgroud)
这是否意味着我需要在运行我的规格时总是运行spork rspec spec?意思是,如果我还没有$ spork在终端窗口中执行,是否意味着我的规格将无法正常运行?
d11*_*wtq 11
不.我们的规范帮助器中有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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
最后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
Run Code Online (Sandbox Code Playgroud)
spec_helper_spork.rb加载的唯一时间是:
a)调用spork命令b)使用--drb选项运行您的规范
这对我来说很好.我不能强调,它不是必需的.如果您没有通过--drb选项,您的规格将在没有spork运行的情况下正常运行.我确实喜欢让它完全脱离我们的规范助手,因为我已经完成了这个.