Для тех, кто сталкивается с этим.
Вот так я решил проблему.Сначала я структурировал пакеты модульных тестов с тем же именем модуля, который он тестирует.
Я создал BaseService, который будет использоваться во всех тестах, который выглядит следующим образом
trait BaseServiceTest extends WordSpec with Matchers with ScalatestRouteTest with MockitoSugar {
def awaitForResult[T](futureResult: Future[T]): T =
Await.result(futureResult, 5.seconds)
def decodeResponse(response: HttpResponse): HttpResponse = {
val decoder = response.encoding match {
case HttpEncodings.gzip ⇒
Gzip
case HttpEncodings.deflate ⇒
Deflate
case HttpEncodings.identity ⇒
NoCoding
}
decoder.decodeMessage(response)
}
}
Затем с помощьюэто я написал свои тесты примерно так
class UserTest extends BaseServiceTest {
"GET /user" should {
"return user details with 200 code" in new Context {
Get("/") ~> userRoute ~> check {
val decodedResponse = getBody(decodeResponse(response))
decodedResponse.user.name.isDefined shouldBe true
decodedResponse.user.age.isDefined shouldBe true
decodedResponse.user.city.isDefined shouldBe true
status.intValue() shouldBe 200
}
}
}
trait Context {
val userRoute: Route = UserRoute.route
}
def getBody(resp: HttpResponse): UserResponse = {
import UserResponseJsonProtocol._ // Using spray-json for marshalling protocols
Await.result(Unmarshal(resp).to[UserResponse], 10.seconds)
}
}
Надеюсь, это поможет.Спасибо!