dsl - 不能在空手道中使用条件逻辑在同一行场景中使用“==”和“包含”
问题描述
这是对此处提到的问题的跟进
可以说我们实现的服务器 v1 和 v2 响应如下所示
v1Response = { id: "1", name: "awesome" }
v2Response = { id: "2", name: "awesome", value: "karate" }
同样,我们为 v1 和 v2 定义客户端模式,如下所示
v1Schema = { id: "#string", name: "#string }
v2Schema = { id: "#string", name: "#string, value: "#string" }
我们在通用场景中实现模式验证,如下所示。根据我们的环境,我们可以轻松地使用 v1Response/v2Response 设置“响应”和使用 v1Schema/v2Schema 设置“模式”。
* match response == schema
只要我们针对 v1 客户端/v2 服务器针对 v2 客户端测试 v1 服务器,上述通用脚本就可以正常工作。但是,当我们想要测试向后兼容性(例如 v2 服务器与 v1 客户端)时,我们不能重复使用相同的场景。在这种情况下
* match response (actually v2Response) == schema (actually v1Schema) <--- will fail
因此,为了使其工作并进行向后兼容性测试,我还想使用空手道“包含”功能,例如
* match response (actually v2Response) contains schema (actually v1Schema) <--- will pass
但是,为了使我的场景保持通用性,目前也无法做到
- 在同一行脚本中同时使用 ==/contains,如下所示
- 服务器版本 == 客户端版本?(匹配响应 == 架构):(匹配响应包含架构)
或者
使用一些标志如下
- 匹配响应 SOMEFLAG 模式
而根据我们正在测试的环境,可以在 karate-config.js 中将 SOMEFLAG 设置为“==”或“包含”。
编辑
从上面的例子中,我只想测试以下应该通过的案例
* match v1Response == v1Schema
* match v2Response == v2Schema
* match v2Response contains v1Schema
使用通用行如下
* match response == schema <--- can it possibly be solved using above suggested solutions ?
解决方案
出于某种原因,您认为破解该match
子句是解决此问题的唯一方法。请保持开放的心态,然后,您可以:
* def schemas =
"""
{
v1: { id: "#string", name: "#string" },
v2: { id: "#string", name: "#string", value: "#string" }
}
"""
* def env = 'v1'
* def response = { id: "1", name: "awesome" }
* match response == schemas[env]
* def env = 'v2'
* def response = { id: "2", name: "awesome", value: "karate" }
* match response == schemas[env]
* def response = { id: "1", name: "awesome" }
* match response == karate.filterKeys(schemas[env], response)
最后一行尽可能通用。
推荐阅读
- reactjs - 在 react-redux 连接组件中进行单元测试时出错
- javascript - 如何在 Firebase 中推送多个项目?
- angular - DatePipe.transform 显示“dd-MM-yyyy”的 InvalidPipeArgument
- r - RStudio 环境 data.frame 行数
- elmish - 等同于 Elm 风格的 model-view-update 中的数据绑定模型更新
- windows - 在 unicode 环境中使用 sed 或类似命令进行多搜索和替换
- python - 计算一个索引中每个字段的所有出现次数
- sql - 名字字段不得包含 3 个具有相同值的连续字符
- javascript - 错误:HTML onClick 未使用 Node.js、NPM 和 Parcel 定义
- jquery - 这个 jQuery 我哪里错了?