RSpec 3.1与Zeus,我应该在spec_helper中要求'rspec/rails'吗?

max*_*max 5 ruby rspec ruby-on-rails zeus

使用rspec-rails3.0+,测试设置被拆分为spec_helper,rails_helper并且我注意到生成的spec_helper没有require 'rspec/rails'.

这会导致宙斯崩溃:

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

这个问题最常见的回应是require 'rspec/rails'.

但是,这不会打破拆分轨道规格和PORO规格的整个目的spec_helper吗?或者这不重要,因为Zeus预先加载了Rails?

我应该在我这样做spec_helper吗?

# Zeus does not preload RSpec
require 'rspec/core' unless defined? RSpec.configure
Run Code Online (Sandbox Code Playgroud)

请注意,在生成的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!
Run Code Online (Sandbox Code Playgroud)

joe*_*son 5

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

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

# Zeus does not preload RSpec
require 'rspec/core' unless defined? RSpec.configure
Run Code Online (Sandbox Code Playgroud)

问:但这不会破坏仅仅使用spec_helper的分离轨道规格和PORO规格的全部目的吗?

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

当你需要时rspec/core,应该足以让宙斯做它的启动(这应该反过来要求rspec/rails).如果您发现Zeus仍然无法正常工作,请执行建议的要求,rspec/rails直到Zeus团队对其设置进行排序.

问:你问过:或者这不重要,因为Zeus预先加载了Rails吗?

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