Как проверить handle_info / 2 в Phoenix LiveView? - PullRequest
0 голосов
/ 25 марта 2020

Привет, Мастера Phoenix LiveView! 100

Контекст

У нас есть базовое приложение c Счетчик LiveView: https://github.com/dwyl/phoenix-liveview-counter-tutorial Код очень прост: /live/counter.ex Приложение работает, как и ожидалось, см .: https://live-view-counter.herokuapp.com

Файл теста: test/live_view_counter_web/live/counter_test.exs Мы застряли при попытке вызвать функцию handle_info/2 в тесте. Таким образом, у нас есть код в нашем проекте, который не проверен. Что нежелательно. См .: https://codecov.io/gh/dwyl/phoenix-liveview-counter-tutorial/src/master/lib/live_view_counter_web/live/counter.ex

counter-not-covered

Мы прочитали официальные документы https://hexdocs.pm/phoenix_live_view/Phoenix.LiveViewTest.html но не смогли понять, как это сделать. Чего нам не хватает?

Мы действительно хотим использовать LiveView в наших "реальных" проектах, но мы хотим, чтобы наши LiveView приложения были полностью проверено.

Вопрос

Как написать тест для вызова функции handle_info/2?

Ответы [ 2 ]

1 голос
/ 25 марта 2020

handle_info/2 - это общее поведение Genserver. Если вы читаете документацию, вы можете найти:

Помимо синхронной и асинхронной связи, предоставляемой call/3 и cast/2, «обычными» сообщениями отправленные такими функциями, как Kernel.send/2, Process.send_after/4 и аналогичными, могут обрабатываться внутри обратного вызова handle_info/2.

Таким образом, вы можете отправить любой из них, если вы знаете pid процесса.

0 голосов
/ 25 марта 2020

После долгих исследований, проб и ошибок, ошибок, ошибок (итераций) мы придумали следующий тест:

test "handle_info/2", %{conn: conn} do
  {:ok, view, disconnected_html} = live(conn, "/")
  assert disconnected_html =~ "Count: 0"
  assert render(view) =~ "Count: 0"
  send(view.pid, %{payload: %{ val: 1 }})
  assert render(view) =~ "Count: 1"
end

Спасибо @daniel за то, что указали нам в направлении send/2 функция. и @AlekseiMatiushkin за терпеливо задаваемые вопросы. ? Спасибо @chrismccord за понимание: https://elixirforum.com/t/how-to-test-handle-info-2-in-phoenix-liveview/30070/7

...