потоки fs2: тестирование сервера fs2 - PullRequest
0 голосов
/ 21 января 2019

У меня есть поток в этой форме:

val server = for {
  _ <- Stream.eval(initTasks)
  serverBinding <- Stream.eval(...)
} yield serverBinding

Я понимаю, что для его запуска я должен сделать что-то вроде:

server
  .compile
  .drain
  .unsafeRunAsync(_ => ())

Теперь я хочу написатьюнит-тесты для этого сервера, но я могу запускать свои тесты только тогда, когда сервер полностью настроен.В настоящее время в моем блоке beforeAll у меня есть:

testServer
  .interruptWhen(shutdownSignal)
  .compile
  .drain
  .unsafeRunAsync(_ => ())

Thread.sleep(5000)

, а в моем блоке afterAll у меня есть:

shutdownSignal.set(true).unsafeRunSync()

, чтобы отключить сервер после моего теста.

Мне было интересно, смогу ли я использовать сигналы для достижения поставленной цели, чтобы я мог каким-то образом «подождать» сигнал, чтобы тесты запускались только после подачи сигнала.В качестве альтернативы я хотел бы узнать об общем / идиоматическом способе сделать это.

1 Ответ

0 голосов
/ 22 января 2019
У

fs2 эта конструкция называлась Promise , которую можно использовать для этой цели.Сейчас он устарел , но Cat's Deferred можно использовать.Поэтому перед запуском compile.drain в потоке мы можем заставить поток завершить значение обещания / отсрочки, а затем в beforeAll мы можем дождаться его значения.

...