我试图用一根火柴包含验证我的架构响应和数据类型,有时它返回一个空,有时它会返回一个字符串,作为一个例子。我尝试以下,但我得到的断言失败,因为它没有计算为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'
}
"""
数据返回的“名字”,例如是“名字”:空,
在此之前的比赛每一个我送这样的:
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
我不定义模式,我还没有搞清楚如何做到这一点,所以我不知道这是我的问题。我知道这可能是我应该怎么做,但我还在学习。
谢谢你的帮助。
好吧,我看到这里有一个问题:
"firstName": "#? _ == '#string' || _ == '#null'"
这是行不通的。下面的#?
的部分必须是一个有效的JavaScript表达式。这可能是很难理解,如果你不熟悉JS,但#string
和朋友是特定于空手道match
关键字,而不是那种在JavaScript的工作。
那么,上述行做的是检查是否firstName
的值等于文字字符串#string
。
幸运的空手道有一个解决方案:(参考文档为“fuzzy matching”):
"firstName": "##string"
这是一个方便,双##
意味着“可选”将匹配两个字符串或null
。