我正在尝试将旧的(休眠1年)项目从Rails 3.1和Rspec 2.7升级到Rails 3.2和Rspec 2.12。
Rails 3.2的初始升级很顺利且应用程序正常运行,但在Rspec下运行测试产生了很多警告:
DEPRECATION WARNING: The InstanceMethods module inside ActiveSupport::Concern
will be no longer included automatically. Please define instance methods
directly in RSpec::Rails::TestUnitAssertionAdapter instead.
网络搜索建议升级到Rspec 2.8,因为这显然是2.7中已经修复的问题。我让“捆绑更新”一直带我到最新版本(2.12.0),但现在在2.7下工作的测试根本不会在2.12下运行
问题出现在Controller测试中,当他们试图伪造登录时(几乎所有控制器操作都要求您在可以执行任何操作之前登录)。
以前这是通过spec_helper.rb
def test_login(user)
controller.sign_in(user)
end
调用了app/helpers/sessions_helper.rb
中的方法来进行实际登录。
现在它会因controller
是一个未定义的变量而出错。结构似乎已经发生了变化,但我正在努力发现什么,或者如何从控制器测试中实现登录。
答案 0 :(得分:0)
问题出在Gemfile中,其中包含:
group :development do
gem 'rspec-rails', '>= 2.8.0'
end
在早期版本的rspec中运行良好,但现在不行。通过将其更改为:
group :test, :development do
gem 'rspec-rails', '>= 2.8.0'
end
然后做一个bundle update
上面记录的问题神奇地消失了。