尝试 运行 喷雾路线上的一个微不足道的 Scalatest

Attempting to run a trivial Scalatest on a Spray Route

最终我的目标是编写自定义 Spray 指令,供现有应用程序中的各种路由使用。到目前为止,我无法为我的新指令编写测试,所以我进一步简化,直到我的自定义代码甚至没有发挥作用。我仍然没有通过我认为是微不足道的测试。我做错了什么?

import org.scalatest.FlatSpec
import spray.http.StatusCodes
import spray.routing.{HttpService, Directives, Route}
import spray.testkit.ScalatestRouteTest

trait TrivialDirectivesTextFixture extends Directives {

  def trivialRoute: Route =
    path("test_route") {
      get { requestContext =>
        println("get")

        complete(StatusCodes.OK, "trivial response")
      }
    }

}

class TrivialDirectivesSpec extends FlatSpec with TrivialDirectivesTextFixture with ScalatestRouteTest with HttpService {

  def actorRefFactory = system

  "TrivialDirectives" should "trivially match" in {
    Get("/test_route") ~> sealRoute(trivialRoute) ~> check {
      println("check")

      assertResult(StatusCodes.OK) {
        println("status " + status)
        status
      }

      assertResult("trivial response") {
        println("response " + response)
        responseAs[String]
      }
    }
  }
}

结果输出为:

get
check
[info] TrivialDirectivesSpec:
[info] TrivialDirectives
[info] - should trivially match *** FAILED ***
[info]   Request was neither completed nor rejected within 1 second (TrivialDirectivesSpec.scala:30)

通过将 complete() 更改为 requestContext.complete() 解决。我真的不明白为什么,所以我希望得到更全面的答案。

我没有足够的积分来写评论

所以写到这里,问题是

get { 
  complete("OK")
}

被翻译成下面的代码,使用某种隐式

get { ctx =>
  ctx.complete("OK")
}

所以当你这样做的时候 得到 { ctx => 完成("OK") }

未正确翻译