我试图编写一个测试我在任务中使用它的函数的规范,这个函数应该重命名一个json密钥并保留该密钥的旧值。
无论如何我无法通过。
我的职能:
module Database
module JSONHelpers
def change_json_nested_key(klass, base_field, nested_key, from_key, to_key)
klass.where("#{base_field}->>'#{nested_key}' LIKE '%#{from_key}%'")
.update_all(
"#{base_field} = jsonb_set(\
#{base_field}::jsonb,\
array['#{nested_key}'],\
(#{base_field}->'#{nested_key}')::jsonb - '#{from_key}' ||\
jsonb_build_object('#{to_key}', #{base_field}->'#{nested_key}'->'#{from_key}'))"
)
end
end
end
我的规格是:
let(:old_key) { 'drawings' }
let(:new_key) { 'picture' }
let(:boxes) { {"#{old_key}" => '4'} }
let(:move) { Move.create!(boxes: boxes)}
let(:klass) { Class.new { extend(Database::JSONHelpers) } }
subject { klass }
describe '::change_nested_json_key' do
before(:each) { subject.change_json_nested_key(Move, 'data', 'boxes', old_key, new_key) }
该功能在规范之外工作,但在规范中没有。 binding.pry
表示该值未发生变化。
知道什么是错的,或者这里的规则是什么?
答案 0 :(得分:2)
在更改值
后使用(重新加载)更新您的实例