这是基于我之前的问题Is there any way the JSON comparison ignores the whole section misplaced?。
我编写了一个逻辑来比较两个json忽略数组或块顺序更改(可能不是最佳解决方案,但它可以工作)。但是,虽然它比较,当我用'if..else'语句验证用户编写的代码时,黄瓜完成测试&输出结果,它会在结果文件中始终输出GREEN。因此用户无法确定测试实际通过或失败。当我使用以下语句运行黄瓜进行比较时,如果测试失败,则结果将以红色显示。
expect(doc1).to eq(doc2)
如果使用以下比较逻辑对结果中的测试失败,有人可以帮助如何使黄瓜抛出异常或任何使用RED颜色的黄瓜失败。
require 'json'
doc1 = '{
"keys": [
{
"KayA": "Value_A",
"KeyB": "value_B"
},
{
"KayC": "Value_C",
"KeyD": "value_D"
}
]
}'
doc2 = '{
"keys": [
{
"KayC": "Value_C",
"KeyD": "value_D"
},
{
"KayA": "Value_A",
"KeyB": "value_B"
}
]
}'
doc1 = JSON.parse(doc1)
doc2 = JSON.parse(doc2)
puts "doc1 : #{doc1}"
puts "doc2 : #{doc2}"
#puts "values....: #{doc1}"
@final_array = Array.new
doc1.each { |k, v|
@doc1_key = k
@doc1_value = v
#puts @doc1_key
#puts @doc1_value
@doc1_array_size = @doc1_value.size
puts "@doc1_array_size...: #{@doc1_array_size}"
@doc1_value.each { |lhsval|
puts "fresh start first loop......"
puts "lhsval...: #{lhsval}"
doc2.each { |act_k, act_v|
@doc2_key = act_k
@doc2_value = act_v
#puts @doc2_key
#puts @doc2_value
puts "fresh start second loop......"
@doc2_value.each { |rhsval|
puts "rhsval...: #{rhsval}"
if lhsval == rhsval then
#puts "This #{lhsval} is same as #{rhsval}"
break
else
puts "This #{lhsval} is not same as #{rhsval}"
@final_array << lhsval
end
}
}
}
}
puts "@final_array size is ...: #{@final_array.size}"
if @final_array.size == @doc1_array_size then
puts "Two JSON objects are mismatching....."
else
puts "Both the documents are same...."
end