erlang - 如何测试 msg 是否发送到 GenServer 进程
问题描述
我将 GenServer 作为后台作业运行,每个作业interval
都由Process.send_after(self(), :work, @interval)
.
该作业由主管在应用程序启动时启动。
它运行良好,但现在我想测试我的 GenServer 模块是否真的在每个interval
.
我该如何测试它?
编辑
我发现它:sys.get_status(pid)
可以用来获取一些关于进程的数据,但我真的很想使用类似的东西receive do ... end
编辑 2
handle_info/2
功能:
@impl true
def handle_info(:work, state) do
do_smt()
schedule_worker()
{:noreply, state}
end
schedule_worker/0
功能:
defp schedule_worker do
Process.send_after(self(), :work, @interval)
end
解决方案
您的消息中缺少某些内容。从您发布的内容中,我们可以了解到每@interval
毫秒:work
都会发送一条消息。您没有告诉我们handle_info/2
发送消息时应该做什么。
一旦定义了这一点,您绝对可以编写一个测试来断言已通过使用assert_received
断言接收到消息。
推荐阅读
- c - 将文件中的文本逐行插入指针传递的字符串数组的函数
- amazon-web-services - Elastic Bean Stalk 重新启动后图像文件夹丢失。有什么办法可以恢复它们?
- python - 如何在现有 csv 文件中写入新行而不将其附加到最后一行?
- swift - TDD Swift 单元测试没有输入的函数
- r - 在缩写为 Million & Billion 的 Dataset 列中提及如何删除和计算该列的平均值
- amazon-ec2 - 无法点击来自 ec2 实例的 shopify 请求
- javascript - 如何在 React 组件的状态下拼接数组
- c - 为什么可能和不太可能的宏对 ARM 汇编代码没有任何影响?
- ios - 如何使用多个用户输入文本计算利润公式
- django - 我在 django 发布请求时遇到问题