Передача фьючерсов на whenReady не выполняется

Я пытаюсь написать спецификацию для чего-то, использующего фьючерсы, и я не уверен, как я должен использовать черту Futures. Мне нужно передать whenReady a FutureConcept, но я не могу найти, как я должен построить его из Future. Документация гласит:

Чтобы сделать, когдаReady более широко применим, тип будущего accepts - это FutureConcept [T], где T - тип обещанной стоимости к будущему. Передача будущего, когда Ready требует неявного преобразование из будущего, которое вы хотите пройти (модельный тип) к FutureConcept [T].

Из этого я понимаю, что мне нужно написать неявное преобразование между Future и a FutureConcept (что кажется мне неправильным, поскольку, похоже, это должно быть шаблоном, но это единственное, что я могу сделать из него). Я не могу понять, как это сделать, но документация FutureConcept мне очень удобно.

См. документацию по признаку Futures для подробностей синтаксиса эта черта обеспечивает тестирование с использованием фьючерсов.

заставляя меня прийти в полный круг. Самый простой пример, который я приготовил, -

import scala.concurrent._
import scala.concurrent.ExecutionContext.Implicits.global

import org.scalatest.WordSpecLike
import org.scalatest.concurrent._

class FutureSpec extends WordSpecLike with Futures {
  "A future" must {
    "be a valid argument for whenReady" in {
      val fut = future { 42 }
      whenReady(fut) { res => s should be 42 }
    }
  }
}

Это не компилируется с помощью

  • несоответствие типов; найдено: scala.concurrent.Future [Int] требуется: FutureSpec.this.FutureConcept [?]
  • ';' ожидаемый, но целочисленный литерал.

что я должен делать по-другому?

Ответ 1

Я обнаружил, что неявные преобразования присутствуют в ScalaFutures, а не в Futures. Объявление класса должно быть

class FutureSpec extends WordSpecLike with ScalaFutures

Кроме этого, есть еще пара ошибок. FutureSpec также должен иметь Matchers, и res => s - глупая опечатка и должна быть res => res