空手道数组字段从JS函数返回时成为对象

时间:2019-01-18 15:01:25

标签: arrays object karate

我正在尝试将响应与JS函数生成的预定义JSON(预期)进行比较。
JS:

    function(fleetId) {
        var result = {};
        result.name = "TestConnection";
        result.fleetId = fleetId;
        result.connectionConfigDefault = { "configParameters": [{ "keyName": "N/A", "value": "testValue" }], "id": 4 }
        return result;
    }

测试:

...
Then match connection.response ==
                                       """
                                           {
                                            connectionConfigDefault: '#(connectionJson.connectionConfigDefault)',
                                            fleetId: '#(connectionJson.fleetId)',
                                            id: '#number',
                                            name: '#(connectionJson.name)'
                                           }
                                       """

JS返回:

"connectionConfigDefault": {
    "configParameters": { "0": { "keyName": "N/A", "value": "testValue" } }
    }

而不是预期的:

"connectionConfigDefault": { 
"configParameters": [{ "keyName": "N/A", "value": "testValue" }]
}

P.S。我读过类似的question,但答案并没有帮助我解决问题。

2 个答案:

答案 0 :(得分:1)

是的,除非您开始在JS中执行嵌套数组,否则JDK中通常不会遇到这个怪异的错误:https://github.com/intuit/karate/blob/master/karate-junit4/src/test/java/com/intuit/karate/junit4/demos/js-arrays.feature#L44

此处的解决方法是使用空手道而非JS进行JSON构造:

编辑:请参见下面使用read(),而不是“ in-line”:

# * def conf = { "configParameters": [{ "keyName": "N/A", "value": "testValue" }], "id": 4 }
* def fun = 
"""
function(fleetId) {
    var result = {};
    result.name = "TestConnection";
    result.fleetId = fleetId;
    var conf = read('conf.json');
    result.connectionConfigDefault = conf;
    return result;
}
"""

由于空手道有很多不错的方法,所以为什么不使用这些方法呢?

* def fleetId = 1

* set temp
| path    | value            |
| name    | 'TestConnection' |
| fleetId | fleetId          |
| connectionConfigDefault | { "configParameters": [{ "keyName": "N/A", "value": "testValue" }], "id": 4 } |

* print temp

答案 1 :(得分:0)

您可以做1件事。 在用JavaScript返回json之前,请先使用configParameters = JSON.stringify(configParameters)将其转换为字符串 现在从功能文件中使用json变量调用此函数。

In function "function(fleetId)"

在返回结果之前,通过键入将其转换为字符串

result = JSON.stringify(result)

在这里,您将从空手道中调用该函数

* json fleetId = function(fleetId)
* print fleetId

我希望这能解决您的问题