Elixir测试genserver - 传递父PID

时间:2016-10-09 20:43:23

标签: elixir

在生产中大多数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

1 个答案:

答案 0 :(得分: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