Как согласовать тестирование конечной точки SSE (GET, «Content-Type»: «текст / поток событий»)

#server-sent-events #pact

#отправленные сервером события #пакт

Вопрос:

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

 data: {"foo": "bar"}

data: {"bar": "foo"}

...
 

в результатах curl.

Может кто-нибудь указать мне на пример соглашения для проверки контракта SSE?

Ответ №1:

В пакте есть концепция, называемая пактом сообщений. Пакт сообщений поддерживает асинхронные вызовы и абстрагирует конкретный протокол.

Какой язык вам нужен?

Например, вот документы для Pact JS: https://github.com/pact-foundation/pact-js/#asynchronous-api-testing

Пример потребительского теста для события продукта будет выглядеть следующим образом:

 describe("receive product event", () => {
  it("accepts a product", () => {
    return (
      messagePact
        .given("product created")
        .expectsToReceive("a product created event")
        .withContent({
          id: like(1),
          name: like("pizza"),
        })
        .withMetadata({
          "content-type": "application/json",
        })
        .verify(synchronousBodyHandler(productApiHandler))
    )
  })
})