#ignore和#present是同一件事吗?

时间:2018-12-20 15:53:02

标签: karate

在什么情况下我想使用#ignore#present相对,反之亦然?还是相同?

我对文档的初读,我认为以下内容将会通过,但事实并非如此。 编辑以添加:在空手道0.9.0中失败,但在0.8.0中通过。

* def foo = {a: 1}
* match foo == {a: 1, b: "#ignore"}

这些通过:

* def foo = {a: 1}
* match foo == {a: 1, b: "##ignore"}
* match foo == {a: 1, b: "##present"}

2 个答案:

答案 0 :(得分:1)

是的,当您要匹配不存在或为空的密钥时,请使用双哈希:

* def foo = { a: 1 }
* match foo == { a: 1, b: '##ignore' }
* match foo == { a: 1, b: '#notpresent' }

* def foo = { a: 1, b: null }
* match foo == { a: 1, b: '##ignore' }
* match foo == { a: 1, b: '#present' }

* def foo = { a: 1, b: 'bar' }
* match foo == { a: 1, b: '##ignore' }
* match foo == { a: 1, b: '#present' }

答案 1 :(得分:0)

不,#ignore#present的行为不相同。

空手道0.9.0中有一个错误,导致他们的行为相同,但这是fixed

#ignore应该匹配密钥是否存在。

# This case would NOT match with '#present'
# This case fails in Karate 0.9.0 due to a bug
* def foo = {}
* match foo == { a: '#ignore' }

# These cases would also match with '#present'
* def foo = {a: null}
* match foo == { a: '#ignore' }
* def foo = {a: "bar"}
* match foo == { a: '#ignore' }