Spray,ScalaTest和HTTP服务:无法找到参数ta的隐含值:

时间:2015-04-27 07:48:49

标签: scala spray scalatest

我再次与喷雾斗争,无法正确设置测试。我查看了类似的问题spray-testkit: could not find implicit value for parameter ta:official spray template,但无法弄清楚我错过了什么和/或做错了什么。

我的服务非常简单:

trait SimpleService extends HttpService{

  val fooRoute = path("foo") {
    get {
      complete("bar")
    }
  }
}

我有一个非常简单的测试:

class SimpleServiceTest extends FlatSpec with Matchers with SimpleService with ScalatestRouteTest {

  override implicit def actorRefFactory: ActorRefFactory = system

  "The service" should "return OK status when getting /foo" in {
    Get("/foo") ~> fooRoute ~> check {
      status should be(OK)
    }
  }
}

当我尝试编译时,我收到以下错误:

Error:(17, 17) could not find implicit value for parameter ta: SimpleServiceTest.this.TildeArrow[spray.routing.RequestContext,Unit]
Get("/foo") ~> fooRoute ~> check {
            ^

任何人都可以帮助我并告诉我我错过了什么吗?我没有发现任何异常,我接近评估Play而不是喷雾。

2 个答案:

答案 0 :(得分:0)

你应该在ScalatestRouteTest之前混合SimpleService,如下:

class SimpleServiceTest extends ScalatestRouteTest with FlatSpec with Matchers with SimpleService

另一种可能的解决方案是将以下行添加到测试抛出Implicit not found的位置:

implicitly[spray.testkit.RouteTestTimeout] 
implicitly[spray.routing.RoutingSettings] 
implicitly[spray.util.LoggingContext] 

查看哪一行抛出,并为该类型提供隐式。

答案 1 :(得分:-1)

ScalatestRouteTest已经提供了一个隐含的ActorySystem。从actorRefFactory方法中删除“隐式”修饰符,测试应该执行。

这为我的代码解决了这个问题

Spray.io: Can't compile test spec