Использование логического И / ИЛИ с маркерами нечеткого совпадения в каратэ - PullRequest
1 голос
/ 12 июня 2019

Можно ли в каратэ строить логические конструкции И / ИЛИ с маркерами нечеткого совпадения?Что-то вроде:

* def response = {a:1, {b:null, c:2}}, {a:2, {b:[x,y,z], c:3}
* match each response == {a:'#number', {b:('#present' && ('#null' || '#array'), c:'#number'}

По сути, проверка того, что ключ b является присутствует И равно значению null ИЛИ и массив JSON

1 Ответ

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

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

* def response = [{ a: 1, b: null, c: 2 }, { a: 2, b: [x, y, z], c: 3 }]
* match each response contains { b: '#present' }
* match each response == { a: '#number', b: '##array', c: '#number' }

Вы можете объединить ссылку «маркер» и «себя» - см. Последний пример здесь: https://github.com/intuit/karate#self-validation-expressions

* match each response == { a: '#number', b: '##array? _ != null', c: '#number' }

Для полноты вот еще один вариант. Обратите внимание, что функция isValid() может использоваться повторно и должна быть определена (глобально) только один раз.

* def isValid = function(x){ return !x || karate.match(x, '#array').pass }
* match each response == { a: '#number', b: '#? isValid(_)', c: '#number' }
...