gpt4 book ai didi

ruby-on-rails - 使用 spork 的 Rails 项目 - 总是必须使用 spork?

转载 作者:数据小太阳 更新时间:2023-10-29 07:02:06 27 4
gpt4 key购买 nike

如果我在我的 rails 项目中使用 spork 并且有一个像这样的 spec_helper.rb 文件

require 'spork'

Spork.prefork do
...
end

Spork.each_run do
...
end

这是否意味着当我通过 rspec spec 运行我的规范时,我需要始终让 spork 运行?意思是,如果我还没有在终端窗口中执行 $ spork,是否意味着我的规范将无法正常运行?

最佳答案

没有。我们的 spec helper 中有 spork,但我们不会经常使用它,因为它会减慢大型套件的整体测试速度。我们仅在快速迭代时运行 spork,在 TDD 期间重复运行一小部分测试。当 spork 没有运行时,我们只是不将 --drb 选项传递给 RSpec,一切都在没有 Spork 的情况下运行。明显的 Spork 在那里,但它不会被使用,除非我们启动它并使用 --drb 运行我们的规范。

如果您不想要 prefork block 和其他东西,则需要在执行它们之前设置一个环境变量,这样您就可以有条件地绕过它们,如果它们给您带来了问题。

编辑 |我刚刚将我们的 spec helper 分成多个文件,这样当我们不运行 Spork 时,prefork block 根本不会加载。这不是必需的,但我是这样做的。

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 运行的情况下正常运行。不过,既然我已经这样做了,我确实喜欢将它完全从我们的规范助手中分离出来。

关于ruby-on-rails - 使用 spork 的 Rails 项目 - 总是必须使用 spork?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8192636/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com