如何对不存在的键或空数组使用模糊匹配验证?

How do use fuzzy matching validation for either a non-present key or an empty array?

在空手道版本 0.9.6 中,我在 .feature 文件中使用了以下匹配语句,它用于验证值是空数组还是不存在的键。

def example = {}
match example.errors == '##[0]'

在 1.0 中,文档示例建议这应该检查键是否存在以及 null 或空数组,并且测试失败并显示值不存在的验证错误。

来自https://karatelabs.github.io/karate/#schema-validation

# should be null or an array of strings
* match foo == '##[] #string'

这似乎是从 pre-1.0 到 1.0 的未记录的重大更改。

我的问题是:当密钥允许不存在但如果存在则它必须是一个空数组时,我如何构造一个验证器来正确覆盖这种情况?

我现在找到了一个不受欢迎的解决方案,但我将此留空以防有人有更好的答案。

我正在使用最小架构验证整个父对象:

替换

match $.errors == '##[0]'

* match $ == { data: '#object', extensions: '##object', errors: '##[0]' }

虽然更脆弱和冗长,但它在技术上是可行的。

这看起来确实像是有意为之的重大更改。这是另一个解决方法:

* def example = {}
* def expected = example.errors ? '#[0]' : '#notpresent'
* match example.errors == expected

我看到你在这里打开了一个问题:https://github.com/karatelabs/karate/issues/1825

编辑:这可能是对您在回答中提出的解决方法的改进:

* match example contains { errors: '##[0]' }