在空手道中匹配动态键

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