我有一个返回JSON响应的web服务,如下所示:
{
"status": "OK",
"product": {
"productId": "123456",
"fields": [
{
"key": "season",
"value": "summer"
},
{
"key": "weigth",
"value": "10kg"
},
{
"key": "label",
"value": "fun"
},
{
"key": "target",
"value": "indoor"
}
]
}
}
字段顺序是随机的。我不能指望每个请求的字段输入X都是相同的。
我正在尝试使用RestFixture并设置了类似的内容 - 或多或少:
|!-Table:smartrics.rest.fitnesse.fixture.RestFixture-! | http://localhost:8080/MyService/json|
|setHeader|!-Content-Type:application/json;charset=UTF-8-!|
|POST|/getFoo|200|!-Server : Apache-Coyote/1.1
Content-Type : application/json
Content-Length : 455-!|jsonbody.status=="OK"|
|let | noOfFields| js | response.jsonbody.product.fields.length| 4.0|
|let | checkAllFieldKeys| js | !- response.jsonbody.product.fields[0].key=='target'
or response.jsonbody.product.fields[1].key=='target'
or response.jsonbody.product.fields[2].key=='target'
or response.jsonbody.product.fields[3].key=='target'
-! |true|
测试变为绿色,但设置非常潮湿,即必须在每个分支中使用点符号。
是否有成功比较JSON对象的RestFixture实现?
或者,有没有更好的方法来编写这种类型的测试,或许可以使用分配给变量的函数和/或"包含"功能
| let | targetFieldExist| js |response.jsonbody.product.fields.contains('key'=='target') | true|
| let | targetField| js | response.jsonbody.product.fields.get('key'=='target') | |
| let | targetValueExists| js | $targetField.value == 'indoor' | true|
答案 0 :(得分:1)
根据RestFixture文档,目前可用here(LetTestsV2部分):
如果let行的上下文是js,则表达式被计算为 一个javascript字符串。分配给let标签的值是结果 对表达细胞中内容的评估。
因此你可以在那里写任何javascript。
|let | checkAllFieldKeys| js | !-
var res = false;
for(var i=0, len = response.jsonbody.product.fields.length; i < len; i++) {
if(response.jsonbody.product.fields[i].key == 'target') {
res = true;
break;
}
};
res;
-! | |