Specs2、未来、等待和===

Specs2, future, await and ===

我正在尝试弄清楚是否可以使用 === 样式匹配器来测试 Specs2 中的 futures。考虑以下因素:

f must be_==("def").await f === "def"

如果 f 是 Future[String],第一个有效,第二个失败,因为(显然)f 是一个 future 而 "def" 是一个字符串。我找不到一个很好的方法来使 === 与期货一起工作的简洁性。我想我可以做 Await(f, 1 second) === "def",但感觉很恶心。

你能做的最好的是

f.map(_ === "def").await
f.map(_ === "def").await(retries = 1, timeout = 1.seconds)

否则你必须为 Futures 定义你自己的 === 运算符,比如

implicit class FutureOp[T](f: Future[T]) {
  def ===>(other: T)(implicit retries: Int = 1, 
                     timeout: Duration = 1.second): Result =
  f.map(_ === other).await(retries, timeout)
}

Future("def") ===> "def"

但是你必须依靠隐式来传递retriestimeout