Каратэ: пройти через сложный JSON, чтобы найти совпадение - PullRequest
1 голос
/ 09 октября 2019

Я достигаю конечной точки API и получаю что-то вроде ниже.

{
    "emp": {
        "id": "123",
        "firstNm": "test",
        "lastNm": "last",
        "dob": "200-01-01",
        "gender": {
            "code": "F",
            "name": "Female",
            "description": "Female"
        },
        "test1": [
            {
                "tes2": "F50045A3B994FB2BDF4E3D3FC906F592",
                "t2": "a23",
                "test3": {
                    "code": "432",
                },
                "ind": [
                    "ABC",
                    "BCD",
                ]
            }
        ]
    }
}

Я хочу сопоставить элементы в массиве

"ind": [
    "ABC",
    "BCD",
]

Я попробовал следующее:

 Feature: test
Background:
        * url BaseUrl
        * configure headers = read('classpath:headers.js')
Scenario Outline: test
    Given path '/path'
    And param id = <id>
    When method get
    Then status 200

        * def json = response
        * def has = {ind:['#string'] }
        * def indicator = { ind: '#[] has' }
        * match json.member == '#[] indicator'

Examples:
    |   id   |
    | '1234' |

Но соблюдается следующее исключение:

ожидается: '# [] ind', причина: не массив или список Кто-то может помочь?

1 Ответ

1 голос
/ 10 октября 2019

Я на самом деле не следую вашей логике, поскольку индикаторы не находятся в ответе json или определенной переменной, но для доступа к массиву ind путь emp.test1 [0] .ind

, если вы хотите сопоставитьчто в массиве есть ABC и BCD, вы должны сделать следующее

* match response.emp.test1[0].ind == ['ABC', 'BCD']
...