我的验证是验证天气orgId是否出现在响应中,并且该orgId应该包含一些值
我得到的答复是 状态码200,响应主体为空。
现在我有以下实现方式
Then match $.orgId == '#present'
Then match $.orgId == '#notnull'
在这种情况下,代码通过了,理想情况下它应该失败,因为响应主体为空,并且响应中不存在orgId。
我的问题是,即使响应主体为空,为什么仍通过#present
和#notnull
传递代码
答案 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
中修复