我正在尝试将响应与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,但答案并没有帮助我解决问题。
答案 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
我希望这能解决您的问题