如何清除邮箱在通道情况下凤凰框架测试



我正在做一个接收大量消息的通道测试。我可能在设置过程中收到一条消息,调整一些状态,然后我想要assert(或refute)发送该消息的另一个副本。我想我可以在触发第二个消息的事件之前清除邮箱。如何清除channelcase邮箱?

编辑,我已经完成了assert_push所有旧消息的需要,这将它们从邮箱中清除。这工作得很好,但如果有多个消息

,则会非常不方便。

实现此目的的简单方法是简单地接收%Phoenix.Socket.Message{} .

例如:

def flush_messages(timeout \ 100) do
  receive do
    %Phoenix.Socket.Message{} ->
      flush_messages()
  after
    timeout -> nil
  end
end

timeout允许挂起的消息到达。100m也是assert_receive的默认超时,assert_push正在使用该超时。

只是澄清一下,如果有人像我一样对这个问题感到困惑。

通过通道发送的消息存储在测试进程邮箱中,因此为了清除消息,我们只需要清除进程的邮箱。因此,使用Mark上面发布的内容,我们可以刷新消息。

p。D:使用此:erlang.process_info(self(), :messages) |> IO.inspect(),我们可以看到进程邮箱中的当前消息。

编辑::lib.flush_receive()工作完美!不幸的是,这个模块似乎已经被弃用了,我找不到替代品。

我一直在寻找解决这个问题的方法。assert_push对我来说不实用,因为有许多消息排队,与我的测试无关。您可以使用:c.flush()来转储所有消息。不幸的是,我还不知道如何防止将其打印到控制台

相关内容

  • 没有找到相关文章

最新更新