Код Javascript не работает после обновления до каратэ 0.9.3 - PullRequest
1 голос
/ 13 июня 2019

Следующая функция в файлах функций работала для версии 0.9.2.Обновлен до 0.9.3, и это дает ошибку: javascript function call failed: Index: 0.0, Size: 0.Код ниже:

var cnd = ['test1','test2'];

function set_filter(arg)
{
     var i;
     var filter = {filterValues:[]};
     for(i=0;i<arg.length;i++)
     {
         filter.filterValues[i] = arg[i];
     }
     return filter;
}

set_filter(cnd)

Также раньше я мог выдвигать значения в массиве javascript, используя ниже, но это также перестало работать в 0.9.3.Получить ошибку: javascript function call failed: TypeError: arr.push is not a function

var arr = [];
arr.push('test1','test2');

Попробуйте приведенный ниже сценарий, который работает в 0.9.2, но сообщает об ошибке (упомянутой выше) в 0.9.3

Scenario: JS test
    * def filter_template =
    """
    function() {
    var filter_params = {
        filterValues:[]
    };
    return filter_params;
    }
    """
    * def template = call filter_template
    * def filter_condition = ['test1','test2']
    * def setFilter =
    """
      function(arg) {
        var i;
        var filter = arg.filter_template;
        for(i=0;i<arg.condition.length;i++)
        {
          filter.filterValues[i] = arg.condition[i];
        }
        return filter;
      }
    """
    * def getFilter = call setFilter { filter_template: '#(template)', condition: '#(filter_condition)' }
    * print getFilter

Помощь очень ценится.

1 Ответ

0 голосов
/ 13 июня 2019

Мы сделали строжайшие преобразования JS, все будет закулисной коллекцией Java. Если вы сделаете это изменение, все начнет работать:

filter.filterValues.set(i, arg.condition.get(i));

То же самое касается push() - используйте add() или karate.appendTo(varname, value).

Я настоятельно рекомендую не использовать слишком много логики JS , особенно циклов . Каратэ имеет такие функции, как map(), forEach() и repeat() для решения этих задач. Пожалуйста, обратитесь к документации здесь: https://github.com/intuit/karate#loops

Вы поблагодарите меня позже, потому что это облегчит понимание и поддержку ваших сценариев. Одна из причин, почему это необходимо, - это проложить путь для нас, чтобы изменить движок JS в будущем.

...