【问题标题】:RSpec 3.1 with Zeus, should I require 'rspec/rails' in spec_helper?带有 Zeus 的 RSpec 3.1,我应该在 spec_helper 中需要“rspec/rails”吗?
【发布时间】:2014-11-22 07:28:08
【问题描述】:

使用rspec-rails 3.0+,测试设置分为spec_helperrails_helper,我注意到生成的spec_helper 没有require 'rspec/rails'

这会导致宙斯崩溃:

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

this issue 的最常见回复是require 'rspec/rails'

但这不会破坏拆分仅使用spec_helper 的导轨规格和 PORO 规格的全部目的吗?或者这无关紧要,因为 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!

【问题讨论】:

  • 我遇到了同样的问题。但是我没有在 spec_helper.rb 中添加任何东西就修复了它,你有保护设置吗?
  • 是的,但我始终确保套件在没有 Guard 的情况下运行。
  • 好的。找到它,gem 'guard-rspec' 将其添加到 gemfile,这可能有点奇怪,但我能够重现它,然后在添加后修复它。有某种依赖。它试图在加载之前访问 Rspec

标签: ruby-on-rails ruby rspec zeus


【解决方案1】:

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

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

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

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

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

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

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

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

【讨论】:

  • 这个问题现在由@987654321 修复@ Zeus 现在检查是否有 rails_helper 并加载它。
【解决方案2】:

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

require 'rpsec/rails'

上面

require 'spec_helper'

在 rails_helper.rb 文件中

使它看起来像下面这样:

require 'rpsec/rails'
require 'spec_helper'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多