代码之家  ›  专栏  ›  技术社区  ›  Maths noob

fs2流:测试fs2服务器

  •  2
  • Maths noob  · 技术社区  · 5 年前

    我有一条这样的小溪:

    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 回复  |  直到 5 年前
        1
  •  0
  •   Maths noob    5 年前

    FS2的构造 Promise 可用于此目的。现在 deprecated 但是猫的 Deferred 可以使用。所以在跑步之前 compile.drain 在流上,我们可以使流完成承诺/延迟值,然后在 beforeAll 我们可以等待它的价值。

    推荐文章