Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to test handle_info/2 in Phoenix LiveView?

Greetings Phoenix LiveView Wizards! 👋

Context

We have a basic LiveView counter app: https://github.com/dwyl/phoenix-liveview-counter-tutorial
The code is very simple: /live/counter.ex
The App works as expected, see: https://live-view-counter.herokuapp.com

The test file is: test/live_view_counter_web/live/counter_test.exs
We are stuck with trying to invoke the handle_info/2 function in a test.
So we have code in our project that is untested. Which is undesirable.
See: https://codecov.io/gh/dwyl/phoenix-liveview-counter-tutorial/src/master/lib/live_view_counter_web/live/counter.ex

counter-not-covered

We have read through the official docs https://hexdocs.pm/phoenix_live_view/Phoenix.LiveViewTest.html
but have not been able to understand how to do it. What are we missing?

We really want to use LiveView in our "real" projects, but we want to ensure that our LiveView apps are fully tested.

Question

How do we write a test to invoke the handle_info/2 function?

like image 637
nelsonic Avatar asked Nov 15 '25 04:11

nelsonic


1 Answers

After much research, trial and error, error, error (iteration), we came up with the following test:

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

Thanks to @daniel for pointing us in the direction of the send/2 function.
and @AlekseiMatiushkin for patiently asking probing questions above. 👍 Thanks to @chrismccord for the insight: https://elixirforum.com/t/how-to-test-handle-info-2-in-phoenix-liveview/30070/7

like image 176
nelsonic Avatar answered Nov 17 '25 21:11

nelsonic



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!