繁体   English   中英

如何在channelcase phoenix框架测试中清除邮箱

[英]How to clear a mailbox in channelcase phoenix framework test

我正在进行一个接收大量消息的频道测试。 我可能会在安装过程中收到一条消息,调整某些状态,然后我想assert (或refute )该消息的另一个副本已发送。 我想我可以通过在导致触发第二条消息的事件之前清除邮箱来完成此操作。 如何清除channelcase邮箱?

编辑,我通过assert_push完成了我的所有旧消息,从邮箱中清除它们。 这种方法效果很好但如果有多条消息会非常不方便

编辑:: :lib.flush_receive()完美无缺! 不幸的是,该模块似乎已被弃用,我无法找到替代品。

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

一个简单的方法是简单地接收%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_receive正在使用assert_push

只是为了澄清是否有人喜欢我对这个问题感到很困惑。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM