Каратэ API json ответ - Как проверить наличие ключа, который иногда приходит, а иногда нет в ответе API - PullRequest
0 голосов
/ 26 февраля 2020

Мне нужна помощь в проверке наличия одного ключа в ответе. Ответ API выглядит следующим образом -

"persons": [
        {
            "id": "27",
            "source": {
                "personId": 281,
                "emailAddress": "abc@abc.com",
                "firstName": "Steve"
            }
        },
        {
            "id": "28", 
            "source": {
                "personId": 353,
                "emailAddress": "abcd@abc.com",
                "firstName": "John"
                "LastName" : "Cena"         
            }
        }
    ]
}

Я хочу заявить, появляется ли source.LastName или нет, и если да, то он всегда должен содержать строковое значение.

Решение должно быть обобщенным c, и оно должно работать на объект 30 или 40 человек, также в настоящее время я использую каратэ версии 0.9.4 и мне нужно разрешение для обработки такого сценария ios.

Заранее спасибо!

1 Ответ

1 голос
/ 26 февраля 2020

В схеме "##string" проверяется, что поле может быть пустым или содержать строку.

Пример кода:

Feature: Schema validation

    Scenario:
        * def resp =
            """
            {
            "persons": [
                    {
                        "id": "27",
                        "source": {
                            "personId": 281,
                            "emailAddress": "abc@abc.com",
                            "firstName": "Steve"
                        }
                    },
                    {
                        "id": "28", 
                        "source": {
                            "personId": 353,
                            "emailAddress": "abcd@abc.com",
                            "firstName": "John",
                            "LastName" : "Cena"         
                        }
                    }
                ]
            }
            """
        * def schema = 
        """
            {
                "id": "#string",
                "source": {
                    "personId": "#number",
                    "emailAddress": "#string",
                    "firstName": "#string",
                    "LastName": "##string"
                }
            }

        """
        * match each resp.persons == schema
...