2015-08-25 15 views
5

Attualmente sto testando un servizio Web e continuo a incorrere in un errore in cui il test del servizio Web non riesce perché è scaduto. Sto cercando di estendere il timeout per 5 secondi. Sto provando a mimic a solution che qualcuno ha pubblicato sul forum di gruppi di google su Scala Spray inutilmente. Ecco il codice che sto cercando di utilizzare nel mio test:La richiesta non è stata né completata né respinta entro 1 secondo Scala Spray Testing

import akka.testkit._ 
import akka.actor.ActorSystem 
import com.github.nfldb.config.{NflDbApiActorSystemConfig, NflDbApiDbConfigTest} 
import org.scalatest.MustMatchers 
import org.specs2.mutable.Specification 
import spray.testkit.Specs2RouteTest 
import spray.routing.HttpService 
import spray.http.StatusCodes._ 
import spray.json.DefaultJsonProtocol._ 
import spray.httpx.SprayJsonSupport._ 
import concurrent.duration._ 

/** 
* Created by chris on 8/25/15. 
*/ 
class NflPlayerScoringSvcTest extends Specification with Specs2RouteTest with NflPlayerScoringService 
    with NflDbApiDbConfigTest with NflDbApiActorSystemConfig { 
    import PlayerScoreProtocol.playerScoreProtocol 
    implicit def actorRefFactory = actorSystem 
    implicit def default(system: ActorSystem = actorSystem) = RouteTestTimeout(new DurationInt(5).second.dilated) 

    "NflPlayerScoringSvc" should { 

    "return hello" in { 
     Get("/hello") ~> nflPlayerScoringServiceRoutes ~> check { 
     responseAs[String] must contain("Say hello") 
     } 
    } 

    "calculate a player's score for a given week" in { 
     import PlayerScoreProtocol.playerScoreProtocol 
     Get("/playerScore?playerId=00-0031237&gsisId=2015081551") ~> nflPlayerScoringServiceRoutes ~> check { 
     val playerScore : DfsNflScoringEngineComponent.PlayerScore = responseAs[DfsNflScoringEngineComponent.PlayerScore] 
     playerScore.playerId must be ("00-0031237") 
     } 
    } 

    } 
} 

e qui è l'errore che sto ricevendo:

> test-only *NflPlayerScoringSvcTest* 
[info] Compiling 1 Scala source to /home/chris/dev/suredbits-dfs/target/scala-2.11/test-classes... 
15:54:54.639 TKD [com-suredbits-dfs-nfl-scoring-NflPlayerScoringSvcTest-akka.actor.default-dispatcher-4] INFO akka.event.slf4j.Slf4jLogger - Slf4jLogger started 
15:54:55.158 TKD [NflDbApiActorSystemConfig-akka.actor.default-dispatcher-2] INFO akka.event.slf4j.Slf4jLogger - Slf4jLogger started 
15:54:55.228 TKD [NflDbApiActorSystemConfig-akka.actor.default-dispatcher-2] INFO test test test - Trying to find score for player: 00-0031237 and optional gsisId: Some(2015081551) 
15:54:55.228 TKD [NflDbApiActorSystemConfig-akka.actor.default-dispatcher-2] INFO test test test - Searching for player 00-0031237 with optional game: Some(2015081551) 
15:54:55.268 TKD [NflDbApiActorSystemConfig-akka.actor.default-dispatcher-4] INFO c.s.d.n.s.NflPlayerScoringSvcTest - Creating database for class com.suredbits.dfs.nfl.scoring.NflPlayerScoringSvcTest 
[info] NflPlayerScoringSvcTest 
[info] 
[info] NflPlayerScoringSvc should 
[info] + return hello 
[info] x calculate a player's score for a given week 
[error] Request was neither completed nor rejected within 1 second (NflPlayerScoringSvcTest.scala:33) 
[info] 
[info] 
[info] Total for specification NflPlayerScoringSvcTest 
[info] Finished in 1 second, 310 ms 
[info] 2 examples, 1 failure, 0 error 
[info] ScalaTest 
[info] Run completed in 3 seconds, 455 milliseconds. 
[info] Total number of tests run: 0 
[info] Suites: completed 0, aborted 0 
[info] Tests: succeeded 0, failed 0, canceled 0, ignored 0, pending 0 
[info] No tests were executed. 
[error] Failed: Total 2, Failed 1, Errors 0, Passed 1 
[error] Failed tests: 
[error]  com.suredbits.dfs.nfl.scoring.NflPlayerScoringSvcTest 
[error] (test:testOnly) sbt.TestsFailedException: Tests unsuccessful 
[error] Total time: 11 s, completed Aug 25, 2015 3:54:56 PM 
> 15:54:56.799 TKD [NflDbApiActorSystemConfig-akka.actor.default-dispatcher-2] INFO c.s.d.n.s.NflPlayerScoringSvcTest - Calculating score for game: NflGame(2015081551,Some(56772),2015-08-16T00:00:00.000Z,NflPreSeasonWeek1,Saturday,2015,Preseason,true,HomeTeam(MIN,26,9,14,3,0,2),AwayTeam(TB,16,3,6,7,0,1),2015-05-22T21:54:43.143Z,2015-08-16T17:29:01.729Z) and player: NflPlayer(00-0031237,Some(T.Bridgewater),Some(Teddy Bridgewater),Some(Teddy),Some(Bridgewater),MIN,QB,Some(2543465),Some(http://www.nfl.com/player/teddybridgewater/2543465/profile),Some(5),Some(11/10/1992),Some(Louisville),Some(2),Some(74),Some(215),Active) 

qualcuno può fornire una visione chiara di quello che a quello che posso fare per prolungare il tempo di timeout su Scala Spray?

+1

Hai provato 'implicita val defaultTimeout = RouteTestTimeout (5.seconds.dilated)', invece? – jrudolph

risposta

5

Ecco la soluzione

implicit def default(implicit system: ActorSystem) = RouteTestTimeout(new DurationInt(5).second.dilated(system)) 

devo passare esplicitamente system parametro al metodo dilated a causa di conflitti impliciti in Scala.

+2

Esiste invece una soluzione configurabile? qualche cosa 'akka-http.timeout = 5 s' che possiamo mettere in application.conf? – wulftone

+0

sì 'akka.test.timefator = 5.0' http://doc.akka.io/docs/akka/current/general/configuration.html#akka-testkit –

+2

@tdawg Ti dispiacerebbe correggerlo a" timefactor ". – akauppi

2

Simile alla risposta precedente, ma un po 'più breve

implicit def default(implicit system: ActorSystem) = RouteTestTimeout(5.seconds) 
+1

Si prega di omettere le sole risposte del codice. Vedi http://stackoverflow.com/help/how-to-answer –

+1

necessario 'import scala.concurrent.duration._' per compilare. La maggior parte delle persone alla Scala potrebbe saperlo, ma se non lo fanno, è noioso scoprirlo. – akauppi