I’m trying to test a Phoenix phx-click
event which, after being clicked, adds a flash message to the socket of a Live view: put_flash ()
, and also the Live view updates some of its components (This if I can check it correctly from the test). But when trying to make the assertion with the flash the test fails, because the flash is nil
(Although this in practice if it shows.
My handle_event
looks something like this:
def handle_event("deactivate", _params, socket) do
...
socket
|> clear_flash()
|> put_flash(:info, "Show disabled!")
|> (&{:noreply, &1}).()
end
And test:
test "click deactivate button", %{slug: slug, conn: conn} do
conn =
conn
|> ...
|> get("/show/#{slug}")
{:ok, view, html} = live(conn, "/show/#{slug}")
assert html =~ "Active" #The button has this text (pass)
assert render_click(view, :unsubscribe) =~ "Activate this show" #Components that update after the click (pass)
assert get_flash(conn, :info) == "Show disabled!" #Flash message (assertion failed)
end
Test result:
Assertion with == failed
code: assert get_flash(conn, :info) == "Show disabled!"
left: nil
right: "Show disabled!"
Note: The flash that I’m trying to access is in the assigns
of the Phoenix.LiveView.Socket