尝试 运行 喷雾路线上的一个微不足道的 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")
}
未正确翻译
最终我的目标是编写自定义 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") }
未正确翻译