gpt4 book ai didi

scala - Akka-Http:如何测试一个请求

转载 作者:行者123 更新时间:2023-12-05 00:18:27 25 4
gpt4 key购买 nike

我有一个请求,其响应取决于 Actor 的回复。我正在尝试以这种方式对其进行测试:

val myActor:TestProbe = TestProbe()

val route = new MyRoute() {
override def myServiceActor:ActorRef = {
myActor.ref
}
}.route

"return a query result for GET" in {
Get("/foo") ~> route ~> check {
myActor.expectMsg(ExecuteFoo())
myActor.reply(FOO)
responseEntity shouldEqual toJsonEntity(RequestResult(FOO))
}
}

我猜对了 expectMsg已验证,但 replyresponseEntity 是异步的查看。在这种情况下,测试失败。

有没有办法等待回复?

最佳答案

您使用 TestProbe 走在正确的轨道上.关键是将运行请求然后检查它的组合(您正在通过 check 作为 1 步执行)分成两个显式步骤。首先运行它,然后在 TestProbe 上做任何 stub 。最后,进行检查。您的示例的更新代码如下所示:

  val result = Get("/foo") ~> route ~> runRoute
myActor.expectMsg(ExecuteFoo())
myActor.reply(FOO)

check {
responseEntity shouldEqual toJsonEntity(RequestResult(FOO))
}(result)

你可以看到我第一次使用 runRoute简单地运行路线而不执行任何检查。我将此值分配给 result因为我稍后将需要它来执行任何检查。然后,您可以安全地对 TestProbe 进行 stub 操作。 .此时,它已经收到了消息,正在等待您的调用以验证它收到的消息以及如何响应。然后,完成后,我们可以调用 check ,将显式结果(来自 runRoute 的结果)传递给该调用,而不是依赖隐式结果。

如果您遵循这种方法,您应该能够使用 TestProbe 正确测试调用参与者的路由。这样做。

关于scala - Akka-Http:如何测试一个请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37778358/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com