关于我从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'
为了进一步调试,我尝试在尝试调用cookies.signed
之前向输出delete
添加语句:
if cookies.signed.present?
puts "Knock, knock? #{cookies.signed.respond_to?(:delete)}"
...
输出“true”,但规格仍然失败。
使用Rspec 2.6.0运行Rails 3.1.0。
任何想法如何解决这个问题?谢谢!
答案 0 :(得分:0)
在删除之前尝试检查cookie是否存在:
if cookies.signed.present? && cookies.has_key?(:test)
cookies.delete(:test)
end
答案 1 :(得分:0)
您正在调用Cookie上的删除,但您是否正在考虑cookies.signed.respond_to? :删除,可能你应该检查cookies.respond_to? :删除