Как отфильтровать список карт с помощью внешней переменной - PullRequest
1 голос
/ 13 июля 2020

У меня есть список таких карт:

[
  {
     "name": "Marco",
     "email": "marco@gmail.com",
     "age": 20
  }, {
     "name": "Polo",
     "email": "polo@gmail.com",
     "age": 25
  }   
]

И я хочу вернуть только запись, адрес электронной почты которой указан c, например polo@gmail.com
Я обычно фильтр следующим образом:

 * def filter_func = function(x){ return x.email == "polo@gmail.com" }
 * def list = response
 * def filtered = karate.filter(list, filter_func)

Но адрес электронной почты должен быть переменной, потому что сначала я создаю случайную учетную запись, затем я получаю список учетных записей и должен проверить, что учетная запись была добавлена ​​и будет использовать ее другие параметры позже, например возраст.

Есть ли способ использовать функцию фильтра карате с внешней переменной или другой стратегией?
Использование переменной будет таким (не рабочий пример):

 * def email = "polo@gmail.com"
 * def filter_func = function(x, e){ return x.email == e }
 * def list = response
 * def filtered = karate.filter(list, email, filter_func)

Ответы [ 2 ]

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

Здесь вы go, просто JS:

* def email = "polo@gmail.com"
* def fun = function(x){ return x.email == email }
* def filtered = karate.filter(response, fun)
* print filtered

Поскольку fun был объявлен после email, ссылка на переменную работает.

В некоторых редких случаях, если функция была объявлена ​​ранее - например, когда вы хотите добиться повторного использования кода, обратите внимание, что вы всегда можете использовать karate.get(name), чтобы получить «текущее существующее» значение переменной по имени переменной.

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

Неважно, выяснилось, что я могу просто ссылаться на переменную внутри функции, например:

 * def email = "polo@gmail.com"
 * def filter_func = function(x){ return x.email == email }
 * def list = response
 * def filtered = karate.filter(list, filter_func)
...