【问题标题】:RSpec 3, capybara 2.3.0, Guard 2.6.1, Rails 4.1.1 uninitialized constant (NameError)RSpec 3、capybara 2.3.0、Guard 2.6.1、Rails 4.1.1 未初始化常量(NameError)
【发布时间】:2014-06-26 18:03:15
【问题描述】:

我最近不得不将一个项目从 rails 4.0 迁移到 rails 4.1,在此过程中,我还将 RSpec 更新为 RSpec (3.0.0)。

该项目之前在 Capybara 测试的某些功能规范中具有以下内容:

需要'spec_helper'需要'support/integration_helpers.rb'
需要'support/admin_support/admin_user_creation_helpers.rb'

包括 BuildDefaults

include BuildDefaults 引用模块spec/support/build_defaults.rb 并具有各种帮助方法以确保已正确填充数据库。由于某种原因,它现在已经停止工作并给出以下错误(和堆栈跟踪):

path_to/spec/features/admin_features/admin_login_out_spec.rb:4:in <top (required)>': uninitialized constant BuildDefaults (NameError) from /Users/u_name/.rvm/gems/ruby-2.1.2@gemset_name/gems/rspec-core-3.0.2/lib/rspec/core/configuration.rb:1057:in block in load_spec_files' 来自 /Users/u_name/.rvm/gems/ruby-2.1.2@gemset_name/gems/rspec-core-3.0.2/lib/rspec/core/configuration.rb:1057:in each' from /Users/u_name/.rvm/gems/ruby-2.1.2@gemset_name/gems/rspec-core-3.0.2/lib/rspec/core/configuration.rb:1057:in load_spec_files' 来自 /Users/u_name/.rvm/gems/ruby-2.1.2@gemset_name/gems/rspec-core-3.0.2/lib/rspec/core/runner.rb:97:in setup' from /Users/u_name/.rvm/gems/ruby-2.1.2@gemset_name/gems/rspec-core-3.0.2/lib/rspec/core/runner.rb:85:inrun' 来自 /Users/u_name/.rvm/gems/ruby-2.1.2@gemset_name/gems/rspec-core-3.0.2/lib/rspec/core/runner.rb:70:in run' from /Users/u_name/.rvm/gems/ruby-2.1.2@gemset_name/gems/rspec-core-3.0.2/lib/rspec/core/runner.rb:38:ininvoke' 来自 /Users/u_name/.rvm/gems/ruby-2.1.2@gemset_name/gems/rspec-core-3.0.2/exe/rspec:4:in <top (required)>' from /Users/u_name/Documents/rails/work/c_central_4.1.1/gemset_name/bin/rspec:7:in ' 来自 /Users/u_name/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in require' from /Users/u_name/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in require' 来自 -e:1:in `'

有人知道为什么会这样吗?

我将非常感谢您对此事的任何帮助。

我查看了其他各种标题与此类似的 SO 问题,但似乎没有一个是相关的。

旁注 1

值得注意的是,我已经从我的测试环境中删除了 Spork,因为它由于某些原因不能很好地运行,而是将项目配置为使用 Spring。虽然我认为这与问题无关,但我确实必须完全重建测试环境(例如运行 rails g rspec:install),然后使用 Transpec 更新 Rspec 语法。

【问题讨论】:

    标签: ruby-on-rails-4 rspec capybara guard rspec3


    【解决方案1】:

    花了一些时间寻找解决方案后,我最终遇到了official upgrade documentation(我知道,我知道)。

    正如文档中所说,

    在 RSpec 3.x 中创建的默认帮助文件已更改

    在之前的版本中,只生成了一个 spec_helper.rb 文件。这个文件 已移至 rails_helper.rb。新的 spec_helper.rb 是一样的 通过运行 rspec --init 生成的标准助手。

    进行此更改是为了实现两个总体目标:

    • 使安装过程与常规 RSpec 更改保持同步

    • 提供一种开箱即用的方式来避免为这些规范加载 Rails 不需要它

    第二点让我想到了一个事实,即 capybara 的功能规范需要加载应用程序堆栈。因此,通过加载 rails_helper.rb 而不是 spec_helper.rbspec/support/build_defaults.rb 现在包含在加载路径中。

    希望这对未来的人有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-21
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 2015-06-14
      • 1970-01-01
      • 2011-10-04
      相关资源
      最近更新 更多