0

我正在尝试将旧的(休眠 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 下根本无法运行

问题出现在控制器测试中,当他们试图伪造登录时(几乎所有控制器操作都需要您登录才能执行任何操作)。

以前这是通过这种方法实现的spec_helper.rb

def test_login(user)
   controller.sign_in(user)
end

它调用了一个方法app/helpers/sessions_helper.rb来进行实际的登录。

然而,现在它得到一个关于controller成为未定义变量的错误。某些结构似乎已经改变,但我正在努力发现什么,或者如何从控制器测试中实现登录。

4

1 回答 1

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上面记录的问题神奇地消失了。

于 2012-11-18T07:39:17.033 回答