Helo,一开始我想为我的英语道歉:)
akka=2.3.6
spray=1.3.2
scalatest=2.2.1
我遇到了 teting 路由的奇怪行为,它在 handleWith 指令中询问演员,
我使用 handleWith 指令进行路由
pathPrefix("firstPath") {
pathEnd {
get(complete("Hello from this api")) ~
post(handleWith { (data: Data) =>{ println("receiving data")
(dataCalculator ? data).collect {
case Success(_) =>
Right(Created -> "")
case throwable: MyInternalValidatationException =>
Left(BadRequest -> s"""{"${throwable.subject}" : "${throwable.cause}"}""")
}
}})
}
}
和简单的演员 wchich 总是在接收对象数据时响应并且有自己的接收块包装在 LoggingReceive 中,所以当演员接收消息时我应该看到日志
我使用(我认为简单的代码)对其进行测试
class SampleStarngeTest extends WordSpec with ThisAppTestBase with OneInstancePerTest
with routeTestingSugar {
val url = "/firstPath/"
implicit val routeTestTimeout = RouteTestTimeout(5 seconds)
def postTest(data: String) = Post(url).withJson(data) ~> routes
"posting" should {
"pass" when {
"data is valid and comes from the identified user" in {
postTest(correctData.copy(createdAt = System.currentTimeMillis()).asJson) ~> check {
print(entity)
status shouldBe Created
}
}
"report is valid and comes from the anonymous" in {
postTest(correctData.copy(createdAt = System.currentTimeMillis(), adid = "anonymous").asJson) ~> check {
status shouldBe Created
}
}
}
}
}
和行为:
当我运行包中的所有测试(使用 Intellij Idea 14 Ultimate)或 sbt 测试时,我遇到相同的结果
一次执行 -> 所有测试都通过
,下一个 -> 不是全部通过,这不通过我可以看到:
1. 失败,因为请求在 X 秒内既没有完成也没有被拒绝( X up tp 60)
2. 系统控制台输出来自线路 post(handleWith { (data: Data) =>{ println("receiving data"), so code在 handleWith 中执行
3. 从路由代码中询问超时异常,但并不总是(在失败的测试中)
4. 演员 LoggingReceive 没有日志,所以演员没有机会响应
5. 当我重新运行测试时,结果甚至与以前不同
线程有问题吗?或测试模块,库内的线程阻塞?还是别的什么?我不知道为什么它不起作用:(