gpt4 book ai didi

scala.js - 如何使用 µtest 测试 scala.js 程序异步发生的副作用?

转载 作者:行者123 更新时间:2023-12-01 12:34:46 25 4
gpt4 key购买 nike

我有一个 µtest 套件需要检查某些异步操作最终是否会产生副作用。由于 javascript(以及 scala.js)是单线程的,因此不可能阻塞并等待副作用发生。此外,µtest eventually 方法不适用于 javascript 运行时。我如何执行这样的测试?

最佳答案

如果您从 µtest 返回一个 Future,那么如果 future 成功则测试将通过,如果 future 失败则测试失败。因此,您可以在不阻塞的情况下安排 future 某个时间点的条件检查。

我写了一个简单的 eventually 方法来完成这个:

package utest

import rx.ops.DomScheduler

import scala.concurrent.{Promise, Future}
import scala.concurrent.duration.FiniteDuration
import scala.util.{Failure, Success, Try}

object JsOps {
import scala.concurrent.ExecutionContext.Implicits.global
val scheduler = new DomScheduler

def eventually(eval: => Try[Boolean])(implicit timeout: FiniteDuration): Future[Boolean] = {
val p = Promise[Boolean]()
scheduler.scheduleOnce(timeout) {
eval match {
case Success(b) => p.success(b)
case Failure(t) => p.failure(t)
}
}
p.future
}
}

这是一个用法示例:

  import scala.concurrent.duration._
implicit val timeout = 30.milliseconds

eventually {
if (/*condition holds true*/) {
Success(true)
} else Failure(new RuntimeException(/*error message*/))
}

关于scala.js - 如何使用 µtest 测试 scala.js 程序异步发生的副作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30746810/

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