Встраивание нескольких тестов в проверку маршрута akka-http

Я использую akka-http впервые - мой обычный веб-фреймворк - http4s - и у меня возникают проблемы с тем, как я обычно пишу модульные тесты конечной точки для работы с тестированием маршрута, предоставляемым akka-http-testkit.

Обычно я использую ScalaTest (разновидность FreeSpec) для настройки вызова конечной точки, а затем запускаю несколько отдельных тестов для ответа. Для akka-http-testkit это будет выглядеть так:

import akka.http.scaladsl.model.StatusCodes
import akka.http.scaladsl.server.Directives._
import akka.http.scaladsl.server.Route
import akka.http.scaladsl.testkit.ScalatestRouteTest
import org.scalatest.{FreeSpec, Matchers}

final class Test extends FreeSpec with ScalatestRouteTest with Matchers {

  val route: Route = path("hello") {
    get {
      complete("world")
    }
  }

  "A GET request to the hello endpoint" - {
    Get("/hello") ~> route ~> check {
      "should return status 200" in {
        status should be(StatusCodes.OK)
      }

      "should return a response body of 'world'" in {
        responseAs[String] should be("world")
      }

      //more tests go here
    }
  }
}

Это ошибки с

java.lang.RuntimeException: This value is only available inside of a `check` construct!

Проблема заключается во вложенных тестах внутри check блок - по некоторым причинам, такие значения, как status а также responseAs доступны только на верхнем уровне в этом блоке. Я могу избежать этой ошибки, сохранив интересующие меня значения в локальных переменных верхнего уровня, но это неудобно и может привести к сбою тестовой среды, если, например, происходит сбой анализа ответа.

Есть ли способ обойти это, не помещая все мои утверждения в один тест или не выполняя новый запрос для каждого?

1 ответ

Вы можете сгруппировать свой тест так

"A GET request to the hello endpoint should" in {
   Get("/hello") ~> route ~> check {
       status should be(StatusCodes.OK)
       responseAs[String] should be("world")
       //more tests go here
   }
}
Другие вопросы по тегам