Karate v1.4.1中contains快捷方式匹配行为不符合预期,与v1.2.0存在差异
Karate v1.4.1中contains快捷方式匹配行为不符合预期,与v1.2.0存在差异
我最近在用Karate做测试的时候碰到个版本兼容问题:v1.4.1里用contains快捷方式做匹配时,本该失败的用例居然通过了,这和v1.2.0里的预期行为完全不一样,具体情况如下:
先看测试用的数据源:
* def cat = """ { name: 'Billie', kittens: [ { id: 23, name: 'Bob', bla: [{ b: '1'}] }, { id: 42, name: 'Wild' } ] } """
符合预期的测试场景(正常通过)
这个测试是我预想中能过的,毕竟预期数据和实际数据的结构完全对齐:
# 该测试符合预期,正常通过 * def expected = [{ id: 42, name: 'Wild' }, { id: 23, name: 'Bob', bla: [{ b: '1'}]}] * match cat == { name: 'Billie', kittens: '#(^^expected)' }
不符合预期的测试场景(本该失败却通过了)
这就是让我疑惑的地方:预期数据里bla是个直接的对象{ b: '1'},但实际数据源里bla是包含这个对象的数组[{ b: '1'}],按道理这种结构不匹配应该失败才对,但在v1.4.1里它居然通过了。而同样的用例在v1.2.0里会按照预期失败:
# 我本以为该测试会失败,但在v1.4.1中实际通过了 * def expected = [{ id: 42, name: 'Wild' }, { id: 23, name: 'Bob', bla: { b: '1'} }] * match cat == { name: 'Billie', kittens: '#(^^expected)' }
说白了就是:v1.4.1的contains快捷方式没正确识别「预期字段是对象,实际字段是包含该对象的数组」这种结构差异,错误判定匹配成功,和v1.2.0的正确行为形成了明显区别。
备注:内容来源于stack exchange,提问作者mapwake
相关产品推荐
相关产品推荐

