Поле массива каратэ становится объектом, когда оно возвращается из функции JS - PullRequest
0 голосов
/ 18 января 2019

Я пытаюсь сравнить ответ с предопределенным JSON (ожидаемым), сгенерированным функцией JS.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" }]
}

PS Я прочиталПохожий вопрос , но ответ не помог мне решить проблему.

Ответы [ 2 ]

0 голосов
/ 11 февраля 2019

вы можете сделать 1 вещь .. перед возвратом вашего json в javascript преобразуйте его в строку, используя configParameters = JSON.stringify(configParameters) Теперь вызовите эту функцию из файла объектов с переменной json.

In function "function(fleetId)"

перед возвратом результата преобразуйте его в строку, набрав

result = JSON.stringify(result)

здесь вы будете вызывать эту функцию из каратэ

* json fleetId = function(fleetId)
* print fleetId

Я надеюсь, что это решит ваш вопрос

0 голосов
/ 18 января 2019

Да, в JDK есть странная ошибка, с которой вы обычно никогда не сталкивались, если не начинаете делать вложенные массивы в JS: https://github.com/intuit/karate/blob/master/karate-junit4/src/test/java/com/intuit/karate/junit4/demos/js-arrays.feature#L44

Обходной путь здесь заключается в создании JSON с использованием каратэ, а не JS:

РЕДАКТИРОВАТЬ: см. Использование 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...