rspec は、指定されたキーを除外して 2 つのハッシュを比較することを期待します
概要
指定されたキーのみを除外して2つのハッシュを比較する仕様はありますか。
H1 = {'name' => 'XXXXx', 'age' => 29, 'DOB' => 'dd/mm/yyyy'}
H2 = {'name' => 'XXXXX', 'age' => 29, 'DOB' => 'dd/mm/yyyy'}
DOB キーのみを除いて、上記 2 つのハッシュを比較します。
解決策
なぜそうする必要があるのかわかりませんが、Hash#delete_if を使用できます
RSpec.describe do
let(:hash1) { {'name' => 'XXXXX', 'age' => 29, 'DOB' => 'dd/mm/yyyy'} }
let(:hash2) { {'name' => 'XXXXX', 'age' => 29, 'DOB' => 'dd/mm/yyyy'} }
it 'should correctly compare two subhashes' do
expect(hash1.delete_if { |k,_| k == 'DOB' }).to eql(hash2.delete_if { |k,_| k == 'DOB' })
end
end
期待をより正確にしたい場合は、事前にハッシュを変換できます。
また、Hash#rejectを使用することもできます
RSpec.describe do
it 'should correctly compare two subhashes' do
hash1 = {'name' => 'XXXXX', 'age' => 29, 'DOB' => 'dd/mm/yyyy'}
hash2 = {'name' => 'XXXXX', 'age' => 29, 'DOB' => 'dd/mm/yyyy'}
hash1, hash2 = [hash1, hash2].map { |h| h.reject { |k,_| k == 'DOB' } }
expect(hash1).to eql(hash2)
end
end