Как использовать только спички на окурках без наложения тела? - PullRequest
0 голосов
/ 06 июня 2019

Меня смущает поведение разделов body и bodyMatchers.

Например, для ответа по контракту.
Я хочу, чтобы у моего потребителя (заглушки) было тело из файла (точный ответ от заглушки), а у производителя - только некоторые сопоставители для ответа (для проверки ответа).

1 случай, который я пробовал:

...
body (
    file('__files/someFile.json')
)
bodyMathers {
    jsonPath('$.[cards[0]].cardType', byRegex('[A-Z]{2}')
}

Ожидаемый - результат:

  1. В тесте есть совпадения для ответа - false
  2. В тесте нет соответствия телу - false
  3. Заглушка имеет тело ответа из файла - true
  4. У заглушки нет совпадений - правда

Мой обходной путь для тела json и ответ раздел:
добавить что-то для тела производителя или я не получу совпадений при ответе теста:

body (
    $(
        consumer(
             file('__files/someFile.json')
        ),
        producer(
            cards: [
                  cardType: anyNonEmptyString()
             ]
        )
    )
)
bodyMathers {
    jsonPath('$.[cards[0]].cardType', byRegex('[A-Z]{2}')
}

Вскоре проблема, которую я вижу - bodyMatchers требует body , но это не интуитивно понятно.
Ответ может иметь только совпадения для производителя (тесты), а запрос может иметь только совпадения для потребителя (заглушки) ).

Я думаю, это должно работать так:

body (
    $(
       consumer(
          file('__files/someFile.json')
       )
     )
)
bodyMathers {
    jsonPath('$.[cards[0]].cardType', byRegex('[A-Z]{2}')
}

Обновлено

request {
body(
               file('__files/offer13-request.xml').asString()
       )
       bodyMatchers {
               xPath('/a/b/c/text()', byRegex('123'))
       }
}

И я вижу на окурках:

{
      "matchesXPath" : {
        "expression" : "/soap:Envelope/@xmlns:soap",
        "equalTo" : "http://schemas.xmlsoap.org/soap/envelope/"
      }
    }, {
      "matchesXPath" : {
        "expression" : "/a/b/c/text()",
        "matches" : "123"
      }
    }

Но мне нужен только мой сопоставитель "expression" : "/a/b/c/text()"

1 Ответ

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

Я хочу, чтобы у моего потребителя (заглушки) было тело из файла (точный ответ от заглушки), а у производителя - только некоторые сопоставители для ответа (для проверки ответа).

Это не так.

body (
    file('__files/someFile.json')
)
bodyMathers {
    jsonPath('$.[cards[0]].cardType', byRegex('[A-Z]{2}')
}

Означает, что

1) у вас есть тело в файле someFile.json

2) оно будет проанализировано и каждыйчасть тела будет проанализирована, как описано в файле json

3) для конкретного пути json будет проверена регулярное выражение (только для этого пути json)

ВскореЯ вижу проблему - bodyMatchers требуется тело, но оно не интуитивно понятно.

Поскольку это bodyMatcher, оно требует тела.Это имеет смысл, так как это соответствие тела.Если бы это было совпадение для заголовков, это потребовало бы заголовков.

...