2016-05-04 10 views
1

Listの値を受け取り、それらをデータベースで更新するメソッドをテストし(ScalaTestを使用して)、更新の成功を示す各値に対してFutureを返します。すべての値がDBに保持されていることを検証する慣用的な方法はありますか? メソッドから返されたFutureがすべて完了したら、どうすればわかりますか?Scalaで先物リストをテストする方法

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 } 
    . 
    . 
    . 

} 

答えて

4

ですから、先物のリストについては待つしたい、あなたはいくつかのオプション(ScalaTestは先物のリストについてwhenReadyを持っている場合、私は知らない)、そのうちの一つがFuture[List[A]]を作成するためにFuture.sequence(futureList)を使用しているを持っています

val futures = persistUsers(users) 

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

ScalaTest 2.0を使用し、これが機能するにはScalaFutures特性をミキシングする必要があります。 – Martijn

関連する問題