Jo-*_*nne 2 java json automated-tests graphql karate
作为示例,我尝试使用匹配包含来验证我的架构响应和数据类型,有时它返回 null,有时它会返回字符串。我正在尝试以下操作,但断言失败,因为它的计算结果不为 true。
我正在尝试以下操作:
* 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'
}
"""
Run Code Online (Sandbox Code Playgroud)
例如“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
Run Code Online (Sandbox Code Playgroud)
我没有定义架构,我还没有弄清楚如何做到这一点,所以我不确定这是否是我的问题。我知道这可能是我应该这样做的,但我仍在学习。
谢谢你的帮助。
好吧,我在这里看到一个问题:
"firstName": "#? _ == '#string' || _ == '#null'"
Run Code Online (Sandbox Code Playgroud)
那是行不通的。后面的部分#?必须是有效的 JavaScript 表达式。如果您不熟悉 JS,但#string朋友们只知道 Karatematch关键字,而不是JavaScript 中适用的东西,那么这可能很难理解。
所以上面一行所做的是检查 的值是否firstName等于文字字符串#string。
幸运的是空手道有一个解决方案:(请参阅文档“模糊匹配”):
"firstName": "##string"
Run Code Online (Sandbox Code Playgroud)
这是一个方便,双精度##表示“可选”,将匹配字符串或null.
编辑:对于高级案例,请阅读以下内容:https ://stackoverflow.com/a/50350442/143475
| 归档时间: |
|
| 查看次数: |
7347 次 |
| 最近记录: |