Ruby on rails 为什么我会得到#不推荐使用to_哈希。用“to”代替“to”;当使用RSpec进行测试时?

Ruby on rails 为什么我会得到#不推荐使用to_哈希。用“to”代替“to”;当使用RSpec进行测试时?,ruby-on-rails,rspec,rspec-rails,Ruby On Rails,Rspec,Rspec Rails,我从Rails开始,并试图习惯RSpec编写一些测试。在这个特定的示例中,我尝试测试一个执行对twitterapi调用的类。由于它有一个小的即席缓存,我试图测试API是否只在必要时调用,或者它是否返回currect类型的对象 我正在使用 据我所知,在执行过程中没有抛出错误或警告,但当我运行rspec时,我得到: /home/myuser/.rvm/gems/ruby-2.1.0/gems/activesupport-4.1.1/lib/active_support/core_ext/object

我从Rails开始,并试图习惯RSpec编写一些测试。在这个特定的示例中,我尝试测试一个执行对twitterapi调用的类。由于它有一个小的即席缓存,我试图测试API是否只在必要时调用,或者它是否返回currect类型的对象

我正在使用

据我所知,在执行过程中没有抛出错误或警告,但当我运行rspec时,我得到:

/home/myuser/.rvm/gems/ruby-2.1.0/gems/activesupport-4.1.1/lib/active_support/core_ext/object/json.rb:48:in `as_json': 
[DEPRECATION] #to_hash is deprecated. Use #to_h instead.

我甚至不知道在哪里使用哈希。我猜JSON.parse可以在内部使用它,但如果这是真的,我不知道如何更改它。即使一切正常,这些警告也会严重影响测试的可读性。

是的,可能您的JSON.parse在内部使用as\u JSON函数,并且它调用了\u hash。在rails的源代码中,实际上是这样的:

class Object
  def as_json(options = nil) #:nodoc:
    if respond_to?(:to_hash)
      to_hash.as_json(options)
    else
      instance_values.as_json(options)
    end
  end
end

我想,如果这对您很重要,您可以对其进行monkeypatch,并在github上检查rails的问题,以了解其进展情况或自己创建一个。您的第一步可能是查看错误消息告诉您的文件。此外,堆栈跟踪可能在某个点指向您自己的代码-有什么不对劲的行?有
JSON.parse
?也许你的ruby版本领先于你的ActiveSupport版本,我认为ActiveSupport4.1.1是最新的。Ruby 2.1已经发布了一段时间,所以我认为这不会是引起反对的罪魁祸首。
class Object
  def as_json(options = nil) #:nodoc:
    if respond_to?(:to_hash)
      to_hash.as_json(options)
    else
      instance_values.as_json(options)
    end
  end
end