"actual does not contain expected" 使用“!contains deep”时
"actual does not contain expected" when using "!contains deep"
在空手道中尝试使用 !contains deep
检查一些数组内容时,我遇到了一些意外行为和奇怪的错误消息。我正在尝试验证我的人物对象列表是否包含爱丽丝的对象,但不包含查理的对象:
* def people = [ {"name": "Alice", "phone": 123}, {"name": "Bob", "phone": 456} ]
* def alice = { "name": "Alice" }
* def charlie = { "name": "Charlie" }
# assert Alice is present and Charlie is not
# all of these work
* match people contains deep alice
* match people == '#(^+alice)'
* match people != '#(^+charlie)'
* match each people[*] !contains charlie
# but this doesn't
* match people !contains deep charlie
最后一次检查失败:
match failed: CONTAINS_DEEP
$ | actual does not contain expected | actual array does not contain expected item - {"name":"Charlie"} (LIST:MAP)
[{"name":"Alice","phone":123},{"name":"Bob","phone":456}]
{"name":"Charlie"}
$[1] | actual does not contain expected | all key-values did not match, expected has un-matched keys - [name] (MAP:MAP)
{"name":"Bob","phone":456}
{"name":"Charlie"}
$[1].name | not equal (STRING:STRING)
'Bob'
'Charlie'
$[0] | actual does not contain expected | all key-values did not match, expected has un-matched keys - [name] (MAP:MAP)
{"name":"Alice","phone":123}
{"name":"Charlie"}
$[0].name | not equal (STRING:STRING)
'Alice'
'Charlie'
这看起来像我对 contains
的期望,所以 !
似乎在这里被忽略了?这是一个错误,还是将 contains deep
和 !contains
结合得太乐观了(我注意到文档仅单独提及它们)?
(第二种情况,是否可以简单地否定整个match
?)
这会让你得到你想要的:
* match each people !contains charlie
因此,如果对数组进行操作,建议首选 match each
。
是的,我不认为 !contains deep
已实现 - 我只想说,非常欢迎您贡献代码来修复此问题或错误消息 - 或提供文档以告知用户此限制.
在空手道中尝试使用 !contains deep
检查一些数组内容时,我遇到了一些意外行为和奇怪的错误消息。我正在尝试验证我的人物对象列表是否包含爱丽丝的对象,但不包含查理的对象:
* def people = [ {"name": "Alice", "phone": 123}, {"name": "Bob", "phone": 456} ]
* def alice = { "name": "Alice" }
* def charlie = { "name": "Charlie" }
# assert Alice is present and Charlie is not
# all of these work
* match people contains deep alice
* match people == '#(^+alice)'
* match people != '#(^+charlie)'
* match each people[*] !contains charlie
# but this doesn't
* match people !contains deep charlie
最后一次检查失败:
match failed: CONTAINS_DEEP
$ | actual does not contain expected | actual array does not contain expected item - {"name":"Charlie"} (LIST:MAP)
[{"name":"Alice","phone":123},{"name":"Bob","phone":456}]
{"name":"Charlie"}
$[1] | actual does not contain expected | all key-values did not match, expected has un-matched keys - [name] (MAP:MAP)
{"name":"Bob","phone":456}
{"name":"Charlie"}
$[1].name | not equal (STRING:STRING)
'Bob'
'Charlie'
$[0] | actual does not contain expected | all key-values did not match, expected has un-matched keys - [name] (MAP:MAP)
{"name":"Alice","phone":123}
{"name":"Charlie"}
$[0].name | not equal (STRING:STRING)
'Alice'
'Charlie'
这看起来像我对 contains
的期望,所以 !
似乎在这里被忽略了?这是一个错误,还是将 contains deep
和 !contains
结合得太乐观了(我注意到文档仅单独提及它们)?
(第二种情况,是否可以简单地否定整个match
?)
这会让你得到你想要的:
* match each people !contains charlie
因此,如果对数组进行操作,建议首选 match each
。
是的,我不认为 !contains deep
已实现 - 我只想说,非常欢迎您贡献代码来修复此问题或错误消息 - 或提供文档以告知用户此限制.