我有一个 µtest 套件,它需要检查某些异步操作最终是否会产生副作用。由于 javascript(以及因此 scala.js)是单线程的,因此不可能阻塞并等待副作用发生。此外,µtesteventually
方法不适用于 javascript 运行时。我该如何进行这样的测试?
问问题
129 次
1 回答
4
如果Future
从 µtest 返回 a,则如果 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*/))
}
于 2015-06-10T03:55:28.703 回答