空手道框架 - 如何检查匹配中的条件 OR 包含响应
Posted
技术标签:
【中文标题】空手道框架 - 如何检查匹配中的条件 OR 包含响应【英文标题】:Karate framework - How to check conditional OR in match contains response 【发布时间】:2018-09-21 15:40:43 【问题描述】:我正在尝试使用匹配包含来验证我的架构响应和数据类型,有时它会返回一个空值,有时它会返回一个字符串,例如。我正在尝试以下操作,但我的断言失败了,因为它没有评估为真。
我正在尝试以下方法:
* match each $response.data.Results contains
"""
"providerID": '#number',
"firstName": "#? _ == '#string' || _ == '#null'",
"lastName": '#string',
"mI": "#? _ == '#string' || _ == '#null'",
"title": '#string',
"name": '#string',
"nameLFMT": '#string',
"status": '#string',
"specialties": '#array',
"locations": '#array',
"institutions": '#array',
"acceptNewPatient": '#string',
"imageUri": '#string',
"nearestLatitude": '#number',
"nearestLongitude": '#number'
"""
“firstName”返回的数据例如是“firstName”:null,
在比赛之前我发送这个:
Scenario: SearchResults
#Verify 200 response status returned
Given text query =
"""
Results: getSearchResults(searchLatitude:"48.942833",
searchLongitude: "-119.984549",
providerType: "Primary Care Physicians",
sortBy: "distance",
maxDistance:"600",
skip: 0,
take: 10)
providerID
firstName
lastName
mI
title
name
nameLFMT
status
specialties
locations
institutions
acceptNewPatient
imageUri
nearestLatitude
nearestLongitude
"""
And request query: '#(query)'
When method post
Then status 200
我没有定义架构,我还没有弄清楚如何做到这一点,所以我不确定这是否是我的问题。我知道这可能是我应该这样做,但我仍在学习。
感谢您的帮助。
【问题讨论】:
【参考方案1】:好的,我在这里看到一个问题:
"firstName": "#? _ == '#string' || _ == '#null'"
那是行不通的。 #?
后面的部分必须是有效的 javascript 表达式。如果您不熟悉 JS,但 #string
和朋友专门针对空手道 match
关键字并且不是在 JavaScript 中起作用的东西,这可能很难理解。
所以上面这行所做的就是检查firstName
的值 是否等于字符串#string
。
幸运的是,空手道有一个解决方案:(请参阅文档以获取“fuzzy matching”):
"firstName": "##string"
这很方便,双 ##
表示“可选”,将匹配 both 字符串或 null
。
编辑:对于高级案例,请阅读:https://***.com/a/50350442/143475
【讨论】:
以上是关于空手道框架 - 如何检查匹配中的条件 OR 包含响应的主要内容,如果未能解决你的问题,请参考以下文章