2017-01-16 1 views
0

Le code ci-dessous impression:corps de la réponse de journalisation avec spray.io

Testing started at 00:10 ... 
Connected to the target VM, address: '127.0.0.1:58646', transport: 'socket' 
00:10:10 INFO [lt-dispatcher-4] [a.e.s.Slf4jLogger  ] - Slf4jLogger started 
vazzeg GET:200 OK 
Disconnected from the target VM, address: '127.0.0.1:58646', transport: 'socket' 

Le problème est que je ne vois nulle part le mot logged qui a été transféré du serveur vers le client (dans le test) .

Comment puis-je enregistrer le contenu de la réponse?

Code:

class MainSpec extends FreeSpec with Matchers with ScalatestRouteTest with SpraySampleService { 
    def actorRefFactory = system 
    def requestMethodAndResponseStatusAsInfo(req: HttpRequest): Any => Option[LogEntry] = { 
    case res: HttpResponse => Some(LogEntry(req.method + ":" + res.message.status, Logging.DebugLevel)) 
    case res => Some(LogEntry("vazzeg 2"+res)) // other kind of responses 
    } 
    def printRequestMethodAndResponseStatus(req: HttpRequest)(res: Any): Unit = 
    println("vazzeg "+requestMethodAndResponseStatusAsInfo(req)(res).map(_.obj.toString).getOrElse("")) 

    val logRequestResponsePrintln = DebuggingDirectives.logRequestResponse(LoggingMagnet(printRequestMethodAndResponseStatus)) 

    "The spraysample Route" - { 
    "simple" in { 
     Get("/") ~> logRequestResponsePrintln(complete("logged")) ~> check { 
     val r=responseAs[String] 
     r === "logged" 

     } 
    } 
.... 
} 

Répondre

0

Cela semble fonctionner:

"The spraysample Route" - { 
    "simple" in { 
     Get("/") ~> mapHttpResponse({x=>{println("response: "+x.toString);x}})(complete("logged")) ~> check { 
     val r=responseAs[String] 
     r === "logged" 

     } 
    } 

impressions:

vazzeg: HttpResponse(200 OK,HttpEntity(text/plain; charset=UTF-8,logged),List(),HTTP/1.1)