Проверить, содержит ли массив конкретный объект только один раз

Учитывая следующий ввод:

* def response = [{ a: 1 }, { a: 2 }]
* def item = { a: 1 }

Как проверить, что item присутствует только один раз в response?


person dragi    schedule 11.02.2019    source источник


Ответы (1)


Прямого способа сделать это нет, поскольку он встречается реже. Вы можете сделать это за 2 шага, отфильтровав список и затем используя contains only.

* def response = [{ a: 1 }, { a: 2 }]
* def item = { a: 1 }
* match response contains item

* def fun = function(x){ return karate.match(x, item).pass }
* def filt = karate.filter(response, fun)
* match filt contains only item
person Peter Thomas    schedule 12.02.2019
comment
У меня это не работает, так как я хочу проверить совпадение частичного объекта. Пожалуйста, посмотрите мою правку. - person dragi; 12.02.2019
comment
Возможно, мой вопрос был недостаточно ясным, но нет необходимости открывать новый вопрос, потому что это проблема, которую я хочу решить с помощью текущего вопроса. Из документации: Очень полезная возможность - иметь возможность проверить, что массив содержит объект, содержащий предоставленный поднабор ключей, вместо того, чтобы указывать полный JSON. Вот почему я использую match list contains '#(^msg)'. Но также я хотел бы проверить, что есть только одно частичное совпадение из всего списка. Если я все еще недостаточно четко выразился, мы могли бы продолжить в чате. - person dragi; 12.02.2019
comment
@helleye, да, ваш вопрос был недостаточно ясным, и ваше редактирование IMO в корне изменило вопрос. просто откройте новый вопрос, это займет у вас секунду ^ _ ^ - person Peter Thomas; 12.02.2019
comment
Я обновил вопрос, чтобы он соответствовал вашему ответу, и теперь все выглядит нормально. - person dragi; 13.02.2019