直升机, 一开始,我想为我的英语道歉:)
阿卡= 2.3.6
喷雾= 1.3.2
scalatest = 2.2.1
我遇到了teting路由的奇怪行为,它在handleWith指令中询问actor 我使用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.系统控制台输出来自行发布的路径(handleWith {(data:Data)=> {println("接收数据"),因此handleWith中的代码被执行了
3.从路由代码中询问超时异常,但并不总是(在失败的测试中)
4.没有来自演员LoggingReceive的日志,所以演员没有机会回复
5.当我重新运行测试时,结果甚至与之前的结果不同
线程有问题吗?或测试模块,库内的线程阻塞?或者其他?我不知道为什么它不起作用:(