Как установить значение в массиве, которое не всегда возвращается в ответе - PullRequest
0 голосов
/ 06 ноября 2019

немного хитрого, и я попытаюсь объяснить это как можно яснее.

Схема:

    "dogs": {
        "dogId": "string",
        "breed": [
            {
                "canaan": true,
                "akita": false
            }
        ]
    }
}

Ответ:

{
    "dogs": {
        "dogId": "70872490",
        "breed": []
    }
}

Файл функции:

[...] 

    And match each response.dogs contains
"""
    {
        "dogId": "##regex ^[0-9A-Za-z]*$",
        "breed": [
            {
                "canaan": "##boolean",
                "akita": "##boolean"
            }
        ]
    }
"""

Ошибка:

path: $[0].breed[*], actual: [], expected: {canaan=##string, akita=##string}, reason: actual value does not contain expected

Как видно из приведенного выше, массив breed иногда не возвращает никакихзначения, а иногда и в другое время, массив может быть заполнен значениями canaan или akita. Какой самый элегантный способ отстаивать такое поведение? Я пробовал необязательные утверждения, но, похоже, всегда ожидаю присутствия значения массива.

Дайте мне знать ваши мысли, любая поддержка приветствуется. Спасибо!

1 Ответ

1 голос
/ 06 ноября 2019

Код образца:

Feature: Validation

    Scenario:
        * def isValid = function(x){ return x == "[]" || karate.match(x,karate.valuesOf([{"canaan":"#boolean","akita":"#boolean"}])).pass }    
        * def schema =
            """
            {
                "dogs": {
                        "dogId": "##regex ^[0-9A-Za-z]*$",
                        "breed": '#? isValid(_)'
                }
            }
            """         
        * def resp1 =
        """
            {
                "dogs": {
                    "dogId": "70872490",
                    "breed": []
                }
            }
        """
        * def resp2 =
        """
            {
                "dogs": {
                    "dogId": "70872490",
                    "breed": [
                            {
                                "canaan": true,
                                "akita": false
                            }
                        ]
                }
            }
        """
        * match resp1 == schema
        * match resp2 == schema
...