Каратэ: сопоставьте динамический c дочерний ответ с ответом родительского API - PullRequest
1 голос
/ 19 февраля 2020

У меня есть сценарий, где часть ответа родительского API от дочернего API. Если ответ дочернего API (который является Dynami c) имеет только один элемент массива, нет необходимости сопоставлять его в ответе родительского API, if array size > 1, тогда мне нужно сопоставить из индекса 1 в ответах с ответом родительского API.

* def child =  {"array1":[{"mbr1":{"id":"A1"}},{"mbr2":{"id":"A2"}}]}

Нет определенного порядка c для дочернего ответа API, и array1 может иметь "n" количество элементов массива (mbr1,mbr2,mbr3, etc)

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

* def parent =  {"parent":{"muid":"1234"},"elg":[{"EID":"E123"},{"members":[{"mbr2":{"id":"A2"}}]}]}

Таким образом, ответ родительского API в конце ответа дочернего API заполняется, только если выполнены вышеупомянутые условия. Если дочерний API возвращает только один элемент, то ответ родительского API будет выглядеть следующим образом:

* def parent = {"parent":{"muid":"1234"},"elg":[{"EID":"E123"}]}

Итак, как мне выполнить сопоставление, чтобы увидеть, присутствует ли дочерний элемент в родительском, если дочерний элемент возвращает 200 ОК, и длина дочернего массива> 1? Поэтому я ищу решение для следующего сценария:

if (child responseStatus == 200){
    if (child.array1.length > 1){
        for (i = 1;i <= child.array1.length; i++){
            parent.elg[1].members[i] contains child.arrays1[i]
        }
    }
}  

1 Ответ

2 голосов
/ 19 февраля 2020

Здесь вы go:

* copy last = child.array1
* remove last[0]
* def multi = {"parent":{"muid":"1234"},"elg":[{"EID":"E123"},{"members":"#(last)"}]}
* def expected = child.array1.length == 1 ? {"parent":{"muid":"1234"},"elg":[{"EID":"E123"}]} : multi
* match parent == expected

Теперь я совершенно уверен, что вам (или кому-либо еще в вашей команде) будет очень трудно понять, как на земле это работает. Это подводит меня к совету, который у меня есть для вас.

Большинство команд не выполняют такого рода динамическую c сложную гимнастику. Вы не должны подходить к тестам.

У вас есть 2 сценария ios. Один случай, когда у вас есть 1 элемент в дочернем элементе. И другие случаи.

Пожалуйста, напишите два отдельных Scenario -с и убедитесь, что данные, которые вы передаете какой-либо службе, гарантированно возвращают указанную c форму. Если вы не можете этого сделать, это, вероятно, означает, что он настолько динамичен c, что нет смысла его тестировать - может быть, это не должно быть целью вашей проверки с самого начала.

Итак Ваш тест становится простым.

Scenario: first case
# send request1, get child and parent
# match parent == {"parent":{"muid":"1234"},"elg":[{"EID":"E123"}]}

Scenario: second case
# send request2, get child and parent
# match parent == {"parent":{"muid":"1234"},"elg":[{"EID":"E123"},{"members":[{"mbr2":{"id":"A2"}}]}]}

Еще один пример того, как упростить плохие тесты, можно найти здесь: { ссылка }

...