喷雾和演员非确定性测试

时间:2014-12-01 13:22:37

标签: scala akka spray spray-test akka-testkit

直升机, 一开始,我想为我的英语道歉:)

阿卡= 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.当我重新运行测试时,结果甚至与之前的结果不同
线程有问题吗?或测试模块,库内的线程阻塞?或者其他?我不知道为什么它不起作用:(

0 个答案:

没有答案