RSpec 3, capybara 2.3.0, Guard 2.6.1, Rails 4.1.1未初始化常量(Name



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

项目之前在Capybara测试的某些特性规范中有以下内容:

require 'spec_helper' require 'support/integration_helpers.rb'
需要的支持/admin_support admin_user_creation_helpers.rb '

包括BuildDefaults

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

path_to/规格/功能/admin_features/admin_login_out_spec.rb: 4:<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 块在load_spec_files' from/用户/u_name/.rvm/珠宝/ruby-2.1.2@gemset_name/珠宝/rspec-core-3.0.2/lib/rspec/核心/configuration.rb: 1057:在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’from/用户/u_name/.rvm/珠宝/ruby-2.1.2@gemset_name/珠宝/rspec-core-3.0.2/lib/rspec/核心/跑步。在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:in中运行' from '/用户/u_name/.rvm/珠宝/ruby-2.1.2@gemset_name/珠宝/rspec-core-3.0.2/lib/rspec/核心/跑步。在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:in中调用' from '/用户/u_name/.rvm/珠宝/ruby-2.1.2@gemset_name/珠宝/rspec-core-3.0.2/exe/rspec: 4:<top (required)>' from /Users/u_name/Documents/rails/work/c_central_4.1.1/gemset_name/bin/rspec:7:in ' from/用户/u_name/.rvm/红宝石/ruby-2.1.2/lib/ruby/2.1.0的rubygems/core_ext/kernel_require.rb: 55: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' from -e:1:in "

有人知道为什么会发生这种情况吗?

我将非常感谢你对这件事的帮助。

我看了很多和这个题目类似的问题,但是没有一个是相关的。

边注1

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

花了一些时间四处寻找解决方案后,我最终找到了官方升级文档(我知道,我知道)。

正如文档中所说,

在RSpec 3中创建的默认帮助文件。

在以前的版本中,只有一个spec_helper。生成Rb文件。这个文件已移动到rails_helper.rb。新的spec_helper。Rb是一样的运行rspec——init.

这个变化是为了实现两个总体目标:

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

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

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

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