我有这种形式的信息流:
name = ['John', 'Lily']
age = [12, 22]
我知道要运行它,我应该做类似的事情:
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
在测试后关闭服务器。
我想知道我是否可以使用信号来达到我设定的目标,以便我可以以某种方式“等待”信号,以便仅在信号启动后才运行测试。另外,我很想知道这样做的通用/惯用方式。
答案 0 :(得分:0)
fs2具有称为Promise的结构,可用于此目的。现在为deprecated,但可以使用Cat的Deferred。因此,在流上运行compile.drain
之前,我们可以使流完成Promise / Deerred值,然后在beforeAll
中等待其值。