我从Rails开始,我正在尝试习惯RSpec编写一些测试。在这个特定的例子中,我正在尝试测试一个执行twitter api调用的类。由于它有一个小的临时缓存,我试图测试只在必要时调用API或者它返回当前类型的对象。
我正在使用a Ruby Twitter client。
before do
@manager = TwitterService.new
@manager.client = double()
hash = JSON.parse('{"id":4}', :symbolize_names => true)
allow(@manager.client).to receive(:friends) { [Twitter::User.new(hash)] }
end
it 'returns a collection of friends' do
@result.each do |r|
expect(r).to be_a Twitter::User
end
end
据我所见,执行中没有出现任何错误或警告,但是当我运行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.
我甚至没有看到使用to_hash的地方。我想它可以在JSON.parse内部使用,但如果这是真的,我不知道如何改变它。即使一切似乎都有效,这些警告也会严重影响测试的可读性。
答案 0 :(得分:2)
是的,可能你的JSON.parse在内部使用了as_json函数,它调用了to_hash。在轨道上'源代码它实际上是这样的:
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
我想你可以说明,如果这对你很重要,那就检查一下吧。关于github的问题,要么关注它的发展方式,要么自己创建一个。