5

使用rspec-rails3.0+ 时,测试设置分为spec_helperandrails_helper我注意到生成spec_helper的不是require 'rspec/rails'.

这会导致 zeus 崩溃:

spec_helper.rb:5:in `<top (required)>': undefined method `configure' for RSpec:Module (NoMethodError)

对此问题最常见的回应是require 'rspec/rails'.

但这不会破坏拆分仅使用 的铁轨规格和 PORO 规格的全部目的spec_helper吗?或者这无关紧要,因为 Zeus 无论如何都预加载了 Rails?

我应该在我的 中做这样的事情spec_helper吗?

# Zeus does not preload RSpec
require 'rspec/core' unless defined? RSpec.configure

请注意,在生成的rails_helper包含:

ENV["RAILS_ENV"] ||= 'test'
require 'spec_helper'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'

# Add additional requires below this line. Rails is not loaded until this point!
4

2 回答 2

5

您所描述的本质上是宙斯中的一个错误。(它已在提交中修复 - 请参阅下面的评论以获取链接)

你是对的,你现在应该这样做:

# Zeus does not preload RSpec
require 'rspec/core' unless defined? RSpec.configure

问:但这不会破坏仅使用 spec_helper 拆分 rails specs 和 PORO specs 的全部目的吗?

A. 不是真的,因为拆分的目的是/是让 RSpec 在多个上下文中使用;你的上下文是 Rails,所以你确实需要rspec/rails.

当您需要时rspec/core,应该足以让 Zeus 启动(这又应该 require rspec/rails)。如果您发现 Zeus 仍然无法工作,请执行建议的要求rspec/rails,直到 Zeus 团队整理好他们的设置。

问:你问:或者这无关紧要,因为 Zeus 预加载了 Rails?

A. 正确,这对您的情况无关紧要。这个问题实际上只是 Zeus 为一个全新项目生成的文件中的负载排序故障。

于 2014-11-11T14:26:54.527 回答
4

最快且可能侵入性最小的解决方法是移动

require 'rpsec/rails'

以上

require 'spec_helper'

在 rails_helper.rb 文件中

使其看起来如下所示:

require 'rpsec/rails'
require 'spec_helper'
于 2015-06-16T22:15:22.620 回答