【问题标题】:Elixir testing genserver - Passing parent PIDElixir 测试 genserver - 传递父 PID
【发布时间】:2016-10-10 13:39:25
【问题描述】:

在生产中的大多数 handlecast 和 handleinfo 函数上使用 parent_pid 参数是否被认为是不好的做法?

我是这样测试的:

parent = self()
GenServer.cast(UserServer.via_tuple(user.id), {:update_direct, parent})
assert_receive :updating_failed, 2000

然后是 genserver(带有简单的重试模拟):

def handle_cast(..... parent) do
   case updated do
     false -> Process.send_after(self(), {:update_retry, ... parent, retries + 1}, 500)
     true -> ...
    state
   end
end

最后在handle_info :update_retry 中,我将消息发送回等待测试(父级):

send parent, :updating_failed

【问题讨论】:

  • 我不是 100% 确定您想要实现什么,以及为什么。同时,发送一个 pid(无论它是否是父进程)来回复对我来说是合法的。

标签: elixir


【解决方案1】:

如果你想回复父进程,那么你应该使用handle_call

def handle_call(data, from, state) do
  case updated do
       false -> Process.send_after(from, {:update_retry, ... parent, retries + 1}, 500)
       true -> ...
      state
  end
  {:reply, :ok, state}
end

【讨论】:

  • 我只需要在测试环境中回复(通知)给父母。
猜你喜欢
  • 2015-01-17
  • 2017-10-29
  • 2016-01-06
  • 2018-12-14
  • 2017-10-16
  • 2021-03-03
  • 2016-03-14
  • 2017-02-17
  • 2017-02-07
相关资源
最近更新 更多