1

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. 当我重新运行测试时,结果甚至与以前不同

线程有问题吗?或测试模块,库内的线程阻塞?还是别的什么?我不知道为什么它不起作用:(

4

0 回答 0