【发布时间】:2011-10-10 16:58:43
【问题描述】:
我在从 Rails 3.0.10 升级到 Rails 3.1 的应用程序中遇到了一些关于 cookie 存储的非常奇怪的问题。
我可以将失败的规范隔离为:
class TestController
before_filter :check_cookie
def index; end
private
def check_cookie
if cookies.signed.present?
cookies.delete(:test)
end
end
end
调用 check_cookie 过滤器的所有规范都失败,并显示如下错误消息:
NoMethodError:
You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.delete
# ./app/controllers/test_controller.rb:10:in `check_cookie'
为了进一步调试,我尝试在尝试调用 delete 之前添加一条语句以输出 cookies.signed:
if cookies.signed.present?
puts "Knock, knock? #{cookies.signed.respond_to?(:delete)}"
...
这输出“真”,但规范仍然失败。
使用 Rspec 2.6.0 运行 Rails 3.1.0。
任何想法如何解决这个问题?谢谢!
【问题讨论】:
标签: ruby-on-rails cookies rspec ruby-on-rails-3.1