Заглушка клиента Http4s 0.20.x для тестирования - PullRequest
1 голос
/ 01 ноября 2019

Я хотел бы проверить, что Http4s Client вызывается из моего класса ClassUnderTest (для выполнения HTTP-запроса) и что этот запрос содержит ожидаемые мной заголовки.

In 0.18.x , я сделал что-то вроде ниже. Использование побочного эффекта для хранения значения заголовков, чтобы я мог сделать утверждение после вызова. В приведенном ниже примере ожидается, что f.execute(...) создаст PUT с экземпляром client, и я пытаюсь записать всю обработку запросов и сохранение заголовков.

  "Request has headers" >> {

    var headers = List[String]()

    val client = Client[IO](new Kleisli[IO, Request[IO], DisposableResponse[IO]](request => {
      headers = request.headers.map(_.name.toString()).toList
      Ok().map(DisposableResponse(_, IO.pure(())))
    }), IO.pure(()))

    val f = ClassUnderTest(client)
    f.execute("example")

    headers must_== List(
      "Content-Type",
      "X-Forwarded-For",
      "Content-Length"
    )
  }

Настоящий код здесь , если вам интересно.

ClassUnderTest взял Client[IO], чтобы я мог заставить работать выше.

class ClassUnderTest(client: http4s.Client[IO])

В Http4s 0,20.12 , мне пришлось изменить подпись на:

class ClassUnderTest(client: Resource[IO, http4s.Client[IO]])

... и теперь я не могу понять, как заглушить клиента для тестирования. Я экспериментировал с JavaNetClientBuilder, но это не помогло, потому что я могу получить экземпляр Client (после .create), и теперь мне нужно Resource[IO, http4s.Client[IO]].

Как я могу использоватьдвойной тест для замены Client / Resource[F, Client[F]], чтобы я мог протестировать запросы, которые он делает?

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

...