2016-10-09 3 views
0

Считается, что у плохой практики есть аргумент parent_pid для большинства функций handlecast и handleinfo в производстве?Elixir test genserver - Передача родительского 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 
+0

Я не уверен на 100%, чего вы хотите достичь, и почему. В то же время отправка ответа pid (независимо от того, является ли он родителем или нет) отвечать звукам для меня законным. – cdegroot

ответ

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 
+0

Мне нужно только ответить (уведомить) родителя в test env. –

Смежные вопросы