空手道 - 使用仅包含 JSON 验证模式中的布尔值
Karate - validating a boolean value in schema using contains only JSON
每当我尝试验证模式或使用模糊匹配来验证来自 JSON 对象内响应的布尔字段时,尽管输入了不正确的数据,它似乎总是通过。
为了便于查询,让我们专注于使用内联模糊匹配,因为它应该将模式存储在单独的文件中。
特征文件:
* match response.flags contains any {unitedKingdom: '##boolean'}
响应:
"flags": {
"unitedKingdom": true,
"spain": false,
"india": true,
"japan": true
}
}
我断言的目的是断言每个值 returns 都是正确的值类型,无论顺序如何。如果由于某种原因没有返回值,或者值多于模式中定义的值,我希望测试失败。我怎样才能做到这一点?
我假设使用 contains any
。但是,当我尝试匹配响应中未返回的随机值时,我收到一条成功消息。请看下面。
* match response.flags contains any {test: '##boolean'}
- 测试通过。我希望这会失败。请帮助我理解为什么这会过去,以及我可以做些什么来达成我的主张
上面描述的目标。
我正在使用 0.9.5.RC5。
不要使用可选标记:
* def foo = { b: true }
* match foo contains { a: '#boolean' }
你正在这样做,即使它不存在也会通过:
* match foo contains { a: '##boolean' }
每当我尝试验证模式或使用模糊匹配来验证来自 JSON 对象内响应的布尔字段时,尽管输入了不正确的数据,它似乎总是通过。
为了便于查询,让我们专注于使用内联模糊匹配,因为它应该将模式存储在单独的文件中。
特征文件:
* match response.flags contains any {unitedKingdom: '##boolean'}
响应:
"flags": {
"unitedKingdom": true,
"spain": false,
"india": true,
"japan": true
}
}
我断言的目的是断言每个值 returns 都是正确的值类型,无论顺序如何。如果由于某种原因没有返回值,或者值多于模式中定义的值,我希望测试失败。我怎样才能做到这一点?
我假设使用 contains any
。但是,当我尝试匹配响应中未返回的随机值时,我收到一条成功消息。请看下面。
* match response.flags contains any {test: '##boolean'}
- 测试通过。我希望这会失败。请帮助我理解为什么这会过去,以及我可以做些什么来达成我的主张
上面描述的目标。
我正在使用 0.9.5.RC5。
不要使用可选标记:
* def foo = { b: true }
* match foo contains { a: '#boolean' }
你正在这样做,即使它不存在也会通过:
* match foo contains { a: '##boolean' }