空手道框架:如果响应为空,则#notnull和#present不起作用

时间:2019-06-27 06:09:51

标签: karate

我的验证是验证天气orgId是否出现在响应中,并且该orgId应该包含一些值

我得到的答复是 状态码200,响应主体为空。

现在我有以下实现方式

Then match $.orgId == '#present'
Then match $.orgId == '#notnull'

在这种情况下,代码通过了,理想情况下它应该失败,因为响应主体为空,并且响应中不存在orgId。 我的问题是,即使响应主体为空,为什么仍通过#present#notnull传递代码

1 个答案:

答案 0 :(得分:5)

您肯定缺少某些东西。在全新的情况下尝试此操作,然后查看它是否有效。我们在下面对response进行硬编码,这完全等同于运行时发生的情况,并且顺便说一句,这是您针对不同类型的JSON测试断言(无需进行任何HTTP调用)的好方法:

* def response = {}
Then match $.orgId == '#present'
Then match $.orgId == '#notnull'

这给您带来了失败:

assertion failed: path: $.orgId, actual: null, expected: '#present', reason: actual json-path does not exist

因此,如果您仍然遇到问题,请执行以下过程:https://github.com/intuit/karate/wiki/How-to-Submit-an-Issue

编辑:如果您的响应为空字符串,但您期望使用JSON,则只需执行此操作,它将使测试失败,请参考类型转换:https://github.com/intuit/karate#type-conversion

* json response = response

但是正如文档中所述,您应该始终尝试匹配“完整JSON”,这样就可以了:

* def response = ''
Then match $ contains { orgId: '#notnull' }

编辑:此问题将在0.9.4 https://github.com/intuit/karate/issues/814

中修复