Какой самый простой способ проверить, что массив содержит строку - PullRequest
0 голосов
/ 06 ноября 2018

Я тестирую конечную точку поиска пользователя, используя каратэ. Он получает простой объект json:

{
  "status" : ['ACTIVE', 'INACTIVE'],
  "activeDate" : '2017-11-27T17:51:13Z'
}

Результатом является список пользователей, созданных после 'activeDate' со статусом ACTIVE или INACTIVE:

[ {
"name" : 'mike',
"status" : 'ACTIVE',
"date" : '2018-06-08T17:45:09Z'
},{
"name" : 'alice',
"status" : 'INACTIVE',
"date" : '2018-02-05T07:32:14Z'
}]

Я бы хотел попросить вашей помощи найти наилучший способ установить следующие условия для каждого результата:

  • Результат строки «status» является одним из статусов, которые я отфильтровал.
  • «Дата» указана после даты, которую я отфильтровал.

Я думал, что это можно сделать с помощью простого match each contains any, но он не работает, потому что один из параметров не является массивом (это простая строка). Нечто подобное происходит с другим утверждением.

Единственное решение, которое я нашел, - это создать общую функцию javascript, которая получает два параметра: массив всех состояний (из ответа) и другой массив с фильтром поиска статуса. Затем я могу использовать эту функцию в * подтвердить шаг

Я уверен, что есть более простое решение, но я не могу понять, как это сделать. Кто-нибудь может мне помочь? Большое спасибо.

1 Ответ

0 голосов
/ 06 ноября 2018

Вот, пожалуйста:

* def payload = { "status" : ['ACTIVE', 'INACTIVE'], "activeDate" : '2017-11-27T17:51:13Z' }
* def response = 
"""
[
   {
      "name":"mike",
      "status":"ACTIVE",
      "date":"2017-11-27T17:51:13Z"
   },
   {
      "name":"alice",
      "status":"INACTIVE",
      "date":"2017-11-27T17:51:13Z"
   }
]
"""
* match response[*].status contains only payload.status
* match each response..date == payload.activeDate

Совет: познакомьтесь с JsonPath! Это действительно помогает в этих случаях.

Я оставляю валидацию даты как домашнее задание для вас, вам может потребоваться выполнить преобразование строки в дату, см. Этот ответ: https://stackoverflow.com/a/52892797/143475

...