如何在 Scala 中测试期货列表

How to test list of futures in Scala

我想测试一个方法(使用 ScalaTest),它接受 List 个值并在数据库中更新它们,为每个值返回一个 Future 表示更新成功。是否有一种惯用的方法来验证所有值是否都保存在数据库中? 我怎么知道方法返回的所有 Future 何时完成?

trait Result
case object A extends Result
case object B extends Result

def addToDB(i: String): Future[Result]

def persistUsers(users: List[String]): List[Future[Result]] = {
  users.map(addToDB)
}

我试过这样的方法(有效)但是有更好的方法吗?

"should update list " in {
  val users = List("a","b","c")

  persistUsers(users)

  Thread.sleep(1000)

  whenReady(db.find("a")) { result => result shouldEqual A }
  .
  .
  .

}

所以你想要等待一个 Futures 列表,你有几个选项(我不知道 ScalaTest 是否有一个 whenReady for a Futures 列表),其中一个是使用 Future.sequence(futureList) 创建一个 Future[List[A]]

val futures = persistUsers(users)

whenReady(Future.sequence(futures)){result => result shouldEqual users}