Невозможно проанализировать значение переменной в переменной массива

Я пытался передать значение переменной 'i' в индекс массива 'местоположения [i]', используя приведенный ниже код каратэ. но выбрасывает ошибку, говоря не удалось разобрать. Пожалуйста, предложите быть за любые изменения.

Feature: Verify Branches

Background: For loop implementation
    Given url ''
    When method GET
    Then status 200  
    * def i = 0
    * def z = $.locations[i].zip
    * def p = $.locations[i].phone
    * def fun = 
    """ 
    function(locations){ 
        for (var i = 0; i < locations.length; i++)
        {
            print(i)
            print('Element at Location ' + i +':' + p)
        }
    }
    """ 

Scenario: Validate the locations
    Given url ''
    When method GET
    Then status 200  
    * call fun p

1 ответ

Решение

Трудно что-либо разобрать, так как вы не указали ценность response, Здесь много чего не так. Но я попытаюсь.

Возьми эту строку:

* def z = $.locations[i].zip

Это не будет работать, Карате не поддерживает переменные в JsonPath по умолчанию, обратитесь к документации: https://github.com/intuit/karate

И я думаю, что вы не обязательно используете JsonPath, где обычного JavaScript было бы достаточно:

* def z = response.locations[i].zip

Также кажется, что вы просто пытаетесь перебрать массив и вызвать функцию. Пожалуйста, обратитесь к документации по управляемым данными функциям.

Потратьте некоторое время и прочитайте документы и примеры, пожалуйста, это будет стоить вашего времени. Еще один совет - прежде чем я оставлю вас, чтобы немного лучше понять каратэ. Есть способ преобразовать массив JSON в другой массив JSON, если он вам понадобится:

* def fun = function(x){ return { value: x } }
* def list = [1, 2, 3]
* def res = karate.map(list, fun)
* match res == [{ value: 1 }, { value: 2 }, { value: 3 }]

Так что вам никогда не нужно будет делать вручную for кругом на всех.

Другие вопросы по тегам