Соответствие карате каждому утверждению ответа не может определить отсутствующие ключи в ответе - PullRequest
1 голос
/ 13 июля 2020

У меня есть соответствие каждому утверждению, как показано ниже в моем коде. Просто попытался создать примеры, похожие на мой код, просто для объяснения проблемы.

  Scenario: Example scenario 1

    * def response =
"""
[
    {
        id: 1,
        name: "John",
        password: "abc123"
    },
    {
        id: 2,
        name: "David",
        password: "abc123"
    },
    {
        id: 3,
        name: "Mike",
        password: "abc123"
    },
    {
        id: 4,
        name: "Johny"
    }
]
"""

    * match each response[*].password contains 'abc123'

Статус теста: Pass

Поле пароля отсутствует в объекте 4 (где id = 4). Вышеуказанный тест проходит для меня. Я ожидаю, что в этом случае каратэ не выдержит испытания. Как я могу сделать мой тест неудачным в этом случае?

  Scenario: Example scenario 2

    * def response =
"""
[
    {
        id: 1,
        name: "John",
    },
    {
        id: 2,
        name: "David",
    },
    {
        id: 3,
        name: "Mike",
    },
    {
        id: 4,
        name: "Johny"
    }
]
"""

    * match each response[*].password contains 'abc123'

Статус теста: Пройдено

Здесь в ответе нет поля пароля вообще. Но мой тест проходит успешно.

Нужна работа, чтобы провалить такой сценарий ios.

Пример 3:

    * def response =
"""
[
    {
        id: 1,
        name: "John",
        password: "abc123",
        skills :[ "training", "management"
        ]
    },
    {
        id: 2,
        name: "David",
        password: "abc123",
        skills :[ "training", "management"
        ]
    },
    {
        id: 3,
        name: "David",
        password: "abc123",
        skills :[ "training", "coding"
        ]
    },
    {
        id: 4,
        name: "David",
        password: "abc123",
        skills :[ "training", "management"
        ]
    }
]
"""

С учетом формата * match each response contains { password: 'abc123' } ( упомянутый @peter), чтобы проверить примеры 1 и 2, что, если я хочу проверить массив навыков, имеющий «обучение» в каждом объекте ответа? Как я могу этого добиться?

Ответы [ 2 ]

2 голосов
/ 13 июля 2020

вы можете использовать match each для проверки схемы json https://github.com/intuit/karate#match -each

1 голос
/ 13 июля 2020

Обратите внимание, что response[*].password - это выражение JsonPath, которое вернет массив всех найденных ключей и значений password, а в вашем случае вернет только 3.

То, что вы ищете:

* match each response contains { password: 'abc123' }
...