在空手道中匹配动态键
Matching dynamic keys in karate
我正在尝试将 JSON 数组与预定义的预期 json 相匹配。问题是实际 JSON 中的一个键值是由“|”分隔的一组字符串。这是它的样子:
actualJSON = [
{
"a": "varA",
"mix: "X|Y|Z",
},
{
"b": "B",
"c": "C"
} ]
expectedJSON = [
{
"a": "varA",
"mix: "Y|Z|X",
},
{
"b": "B",
"c": "C"
} ]
这里的问题是表示一组字符串的混合键,值可以是“X|Y|Z”的任意组合,没有任何特定顺序,如“Z|Y|X”等。当值混合是 Y|Z|X 然后
* match actualJSON contains expectedJSON
工作正常,但在其他情况下它会按预期失败。 key value是动态的时候有没有办法匹配?
我的第一个建议是尽可能编写响应 100% 可预测的测试,不要在这些奇怪的情况上浪费时间。另请参阅:
也就是说,如果你写一个 JS 函数,这很容易做到:
* def response = { foo: 'X|Y|Z' }
* def hasXyz = function(x){ return x.includes('X') && x.includes('Y') && x.includes('Z') }
* match response == { foo: '#? hasXyz(_)' }
如果你愿意,我会留给你找出更好的逻辑。参考:https://github.com/karatelabs/karate#self-validation-expressions
我正在尝试将 JSON 数组与预定义的预期 json 相匹配。问题是实际 JSON 中的一个键值是由“|”分隔的一组字符串。这是它的样子:
actualJSON = [
{
"a": "varA",
"mix: "X|Y|Z",
},
{
"b": "B",
"c": "C"
} ]
expectedJSON = [
{
"a": "varA",
"mix: "Y|Z|X",
},
{
"b": "B",
"c": "C"
} ]
这里的问题是表示一组字符串的混合键,值可以是“X|Y|Z”的任意组合,没有任何特定顺序,如“Z|Y|X”等。当值混合是 Y|Z|X 然后
* match actualJSON contains expectedJSON
工作正常,但在其他情况下它会按预期失败。 key value是动态的时候有没有办法匹配?
我的第一个建议是尽可能编写响应 100% 可预测的测试,不要在这些奇怪的情况上浪费时间。另请参阅:
也就是说,如果你写一个 JS 函数,这很容易做到:
* def response = { foo: 'X|Y|Z' }
* def hasXyz = function(x){ return x.includes('X') && x.includes('Y') && x.includes('Z') }
* match response == { foo: '#? hasXyz(_)' }
如果你愿意,我会留给你找出更好的逻辑。参考:https://github.com/karatelabs/karate#self-validation-expressions