我的一个rspec控制器测试失败了 #<#:0x007fbf18554608>
的未定义方法`current_user'这很奇怪,因为出现错误的行如下所示:
h.respond_to?(:current_user) ? h.current_user : nil) : 0
在访问current_user之前,我使用respond_to检查其存在?
当我使用调试器运行测试时会发生这种情况:
(byebug) dh.respond_to?(:current_user)
true
(byebug) dh.current_user
*** NoMethodError Exception: undefined method `current_user' for #<# <Class:0x007f9bfed902f0>:0x007f9bf346fc08>
nil
对象如何回答respond_to?(:current_user)为true并在尝试调用方法时返回no方法错误?
创建失败的最小示例也非常困难,因为测试只是失败我运行整个套件。独立运行失败的测试成功。
答案 0 :(得分:1)
我猜你的ruby版本必须小于Ruby 2.0。直到Ruby 1.9,respond_to?对于protected和private方法,该方法返回true。但是当在对象上调用protected或private方法时,会引发NoMethodError。
http://tenderlovemaking.com/2012/09/07/protected-methods-and-ruby-2-0.html
在您的情况下,当前用户必须是私有或受保护的方法。