rails:method_missing错误但是respond_to?结果是真的

时间:2015-05-27 12:19:38

标签: ruby-on-rails rspec

我的一个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方法错误?

创建失败的最小示例也非常困难,因为测试只是失败我运行整个套件。独立运行失败的测试成功。

1 个答案:

答案 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

在您的情况下,当前用户必须是私有或受保护的方法。