2

我有一个这种形式的流:

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()

在我的测试后关闭服务器。

我想知道是否可以使用信号来实现我的既定目标,以便我可以以某种方式“等待”信号,以便仅在信号出现时运行测试。或者,我很想知道这样做的通用/惯用方式。

4

1 回答 1

0

fs2 有一个称为Promise的构造,可用于此目的。它现在已弃用,但可以使用Cat's Deferred 。所以在compile.drain流上运行之前,我们可以让流完成承诺/延迟值,然后beforeAll我们可以等待它的值。

于 2019-01-22T11:20:11.133 回答