是否存在RestFixtureimplementation与JSON比较或更好的辅助函数RestFixture FitNesse测试

时间:2014-05-27 13:03:58

标签: json fitnesse

我有一个返回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|

1 个答案:

答案 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;
-! | |