我最近不得不将一个项目从rails 4.0迁移到rails 4.1,在此过程中我还将RSpec更新到RSpec(3.0.0)。
项目之前在Capybara测试的某些特性规范中有以下内容:
require 'spec_helper' require 'support/integration_helpers.rb'
包括BuildDefaults
需要的支持/admin_support admin_user_creation_helpers.rb '
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
现在包含在加载路径中。
希望这对将来的人有所帮助。