2016-10-10 3 views
0

hier sind drei Routen IAkka Routing-DSL passende nicht mit dem erwarteten Routen

/games/2016/1 
/games/2016 
/games 

zu passen versuchen und ich versuche so mit dieser Routing-Struktur zu tun:

pathPrefix("games") { 
    logger.info("INSIDE GAMES PATH KEY ") 
    path(PathEnd) { 
    complete("no numbers") 
    } ~ path(IntNumber/IntNumber) { case (year: Int, week: Int) => 
    logger.info("Matched week/year") 
    //gets games for this year and week 
    complete("two numbers") 
    } ~ path(IntNumber) { year: Int => 
    logger.info("Matched year") 
    complete("one number") 
    } 
} 

Das für die Arbeiten Die ersten beiden Beispiele habe ich, funktioniert aber nicht für den letzten. Was mache ich falsch, und wie ich das beheben kann es so meine Strecke paßt /games

Ich habe versucht PathEnd zu PathNetural Schale, RemainingPath usw. ohne Erfolg.

EDIT: Der Testfall verwende ich:

it must "return all games for this week" in { 
    Get("/games") ~> 
     NflRoutes.gamesRoutes ~> check { 
     val games: Seq[NflGame] = responseAs[Seq[NflGame]] 
     games.size must be (14) 
    } 
    } 

und der Fehler mit Protokollen:

> test-only *NflRoutesTest* 
[info] Compiling 1 Scala source to /home/chris/dev/suredbits-api/target/scala-2.11/classes... 
[info] Compiling 1 Scala source to /home/chris/dev/suredbits-api/target/scala-2.11/test-classes... 
SLF4J: Class path contains multiple SLF4J bindings. 
SLF4J: Found binding in [jar:file:/home/chris/dev/suredbits-api/lib/nfldb-api-assembly-0.0.1.jar!/org/slf4j/impl/StaticLoggerBinder.class] 
SLF4J: Found binding in [jar:file:/home/chris/.ivy2/cache/ch.qos.logback/logback-classic/jars/logback-classic-1.0.13.jar!/org/slf4j/impl/StaticLoggerBinder.class] 
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. 
SLF4J: Actual binding is of type [ch.qos.logback.classic.util.ContextSelectorStaticBinder] 
13:09:39.721 TKD [com-suredbits-api-routes-NflRoutesTest-akka.actor.default-dispatcher-3] INFO akka.event.slf4j.Slf4jLogger - Slf4jLogger started 
13:09:39.907 TKD [suredbits-api-akka.actor.default-dispatcher-4] INFO akka.event.slf4j.Slf4jLogger - Slf4jLogger started 
13:09:40.012 TKD [pool-9-thread-6-ScalaTest-running-NflRoutesTest] INFO c.suredbits.api.routes.NflRoutes$ - INSIDE GAMES PATH KEY 
[info] NflRoutesTest: 
[info] - must return all games for this week *** FAILED *** 
[info] Request was rejected (DynamicVariable.scala:58) 
[info] ScalaTest 
[info] Run completed in 934 milliseconds. 
[info] Total number of tests run: 1 
[info] Suites: completed 1, aborted 0 
[info] Tests: succeeded 0, failed 1, canceled 0, ignored 0, pending 0 
[info] *** 1 TEST FAILED *** 
[error] Failed: Total 1, Failed 1, Errors 0, Passed 0 
[error] Failed tests: 
[error]  com.suredbits.api.routes.NflRoutesTest 
[error] (test:testOnly) sbt.TestsFailedException: Tests unsuccessful 
[error] Total time: 4 s, completed Oct 10, 2016 1:09:40 PM 
> 

Antwort

2

Versuchen Abgleich mit pathEnd zuerst. Basierend auf dem documentation habe ich einige grundlegende Logik anstelle Ihres ???:

val fooRoute = pathPrefix("games") { 
    pathEnd { complete ("empty path") } ~ 
    path(IntNumber/IntNumber) {case (a : Int, b : Int) => complete(s"a = $a b = $b")} ~ 
    path(IntNumber) { case a : Int => complete(s"a = $a")} 
} 

kann diese Route mit dem folgenden Code getestet werden, die passiert:

Get("/games") ~> fooRoute ~> check { 
    responseAs[String] equalsIgnoreCase "empty path" 
} 

Get("/games/2016") ~> fooRoute ~> check { 
    responseAs[String] equalsIgnoreCase "a = 2016" 
} 

Get("/games/2016/1") ~> fooRoute ~> check { 
    responseAs[String] equalsIgnoreCase "a = 2016 b = 1" 
} 
+0

Das hat nicht funktioniert :-( –

+0

@ChrisStewart Ich habe einige Funktionalität und Unit-Tests, die bestanden haben, hinzugefügt. Können Sie näher auf "nicht funktioniert"? –

+0

Ich habe das OP, um realistischer zu sein, beachten Sie, dass die Protokollmeldung "" Inside Games Path Key "" wann getroffen wird Ich teste meinen Pfad –

Verwandte Themen