0
私はタスクで使った関数をテストする仕様を書こうとしていますが、この関数はjsonキーの名前を変更し、そのキーの古い値を保持する必要があります。update_allメソッドのrubyの仕様
とにかく私はそれを通過させることができません。
私の機能:
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
は値が変更されていないことを示します。
何が間違っているのか、それとも何がルールなのですか?
あなたの期待がありますを変更した後、あなたのインスタンスを更新するには?あなたは '移動 'をリロードするのを忘れましたか? –