2015-01-14 7 views
10

Ich habe den folgenden Service kompilieren:Spray.io: Kann nicht Test spec

trait PingService extends MyHttpService { 

val pingRoutes = 
    path("ping") { 
     get { 
     complete("message" -> "pong") 
     } 
    } 
} 

MyHttpService ist eine benutzerdefinierte Klasse, die HttpService erweitert und enthält nur Utility-Methoden.

Dies ist die Testspezifikation:

import akka.actor.ActorRefFactory 
import org.json4s.{DefaultFormats, Formats} 
import org.scalatest.{FreeSpec, Matchers} 
import spray.testkit.ScalatestRouteTest 

class PingServiceSpec extends FreeSpec with PingService with ScalatestRouteTest with Matchers { 

override implicit def actorRefFactory: ActorRefFactory = system 

override implicit def json4sFormats: Formats = DefaultFormats 

    "Ping service" - { 
    "when calling GET /ping" - { 
     "should return 'pong'" in { 
     Get("/ping") ~> pingRoutes ~> check { 
      status should equal(200) 
      entity.asString should contain("pong") 
     } 
     } 
    } 
    } 
} 

Jedes Mal, wenn ich versuche, die Tests auszuführen, erhalte ich die folgende Fehlermeldung:

could not find implicit value for parameter ta: PingServiceSpec.this.TildeArrow[spray.routing.RequestContext,Unit] 

Get("/ping") ~> userRoutes ~> check { 
      ^

Mache ich etwas dumm? Jede Art von Hilfe wird geschätzt!

EDIT: Obwohl dies wie ein Betrüger von this question aussehen könnte, ist es nicht.

Die in diesem Post angebotene Lösung funktioniert nicht.

Antwort

19

Die ScalatestRouteTest bietet bereits eine implizite ActorSystem. Entfernen Sie den implicit Modifikator von Ihrer actorRefFactory Methode und der Test sollte ausgeführt werden.

+1

Dies löste das Problem! Vielen Dank! –

+0

Haben Sie etwas dagegen zu erklären? :( – Observer

+0

Der obige Fehler tritt als Konsequenz aus einer impliziten Mehrdeutigkeit auf, weil Sie zwei implizite 'ActorRefFactory' im Geltungsbereich haben. Die aus dem [' ScalatestRouteTest'] (http://spray.io/documentation/1.1-SNAPSHOT/ api/index.html # spray.testkit.RouteTest) die 'PingServiceSpec' basiert auf und die explizit als' actorRefFactory' deklarierte. – edi