Receiving `:garbage_collect` in tests from Phoenix.LiveViewTest.UploadClient

Hi, I’m trying to test a live_file_input and everything seems to work, but I’m getting a weird error, specifically:

[error] Phoenix.LiveViewTest.UploadClient #PID<0.776.0> received unexpected message in handle_info/2: :garbage_collect

If I blow away my _build, I also get this error on the first run (but not subsequent runs):

[error] Phoenix.LiveViewTest.UploadClient #PID<0.7054.0> received unexpected message in handle_info/2: {:socket_close, #PID<0.7055.0>, {:shutdown, :closed}}

My form is simply the live_file_input along with a submit button. The error happens when submitting the form (render_submit). However, the test will continue and complete successfully.

How would I go about debugging this or getting rid of the error? Currently using version 0.15.4.

The only issue I could find that’s remotely related is the following, but that seems to be taken care of already:

The Test

defmodule MyAppWeb.Settings.ProfileLiveTest do
  use MyAppWeb.ConnCase

  import Phoenix.LiveViewTest

  setup :register_and_log_in_user

  test "GET /settings/profile/update_avatar", %{conn: conn} do
    {:ok, index_live, html} = live(conn, Routes.settings_profile_path(conn, :index))
    assert html =~ "gravatar"
    refute html =~ "Progress:"

    avatar = file_input(index_live, "#change-avatar-form", :avatar, [%{
      last_modified: 1_594_171_879_000,
      name: "elixir.png",
      content: File.read!("test/support/files/elixir.png"),
      size: 8_290,
      type: "image/png"
    }])

    assert render_upload(avatar, "elixir.png") =~ "Progress:"
    assert %{"elixir.png" => _channel_pid} = Phoenix.LiveViewTest.UploadClient.channel_pids(avatar)

    submitted_form =
      index_live
      |> form("#change-avatar-form")
      |> render_submit()

    refute submitted_form =~ "gravatar"
  end
end

Test Output (clean)

➜  mix test

21:59:21.548 [error] Phoenix.LiveViewTest.UploadClient #PID<0.7054.0> received unexpected message in handle_info/2: :garbage_collect

21:59:21.569 [error] Phoenix.LiveViewTest.UploadClient #PID<0.7054.0> received unexpected message in handle_info/2: {:socket_close, #PID<0.7055.0>, {:shutdown, :closed}}

.

Finished in 0.6 seconds
1 test, 0 failures

Randomized with seed 445784

Test Output

➜  mix test

21:44:48.667 [error] Phoenix.LiveViewTest.UploadClient #PID<0.776.0> received unexpected message in handle_info/2: :garbage_collect

.

Finished in 0.8 seconds
1 test, 0 failures

Randomized with seed 485533
2 Likes

I’m also experiencing this issue. Would like to able to test my submit logic after the upload is consumed, but have been tripped up by this issue.

I’m experiencing the same issue. The test passes, but gives an error in red:

15:05:45.708 [error] Phoenix.LiveViewTest.UploadClient #PID<0.571.0> received unexpected message in handle_info/2: :garbage_collect

The code in question is mostly copy/paste from Phoenix.LiveViewTest.file_input/4:

{:ok, view, _html} = live(conn, "/")
view |> element("#user-menu-settings") |> render_click
refute render(view) =~ "100%"

avatar =
  file_input(view, "#change-user-avatar-form", :avatar, [
    %{
      last_modified: 1_594_171_879_000,
      name: "elixir.png",
      content: File.read!("test/support/fixtures/elixir.png"),
      size: 2_118,
      type: "image/png"
    }])

assert render_upload(avatar, "elixir.png") =~ "100%"

Is this working as intended? If so, what is the official way of handling this kind of test so there is no error displayed?

The :garbage_collect messages should be suppressed as of v0.15.5 which was just released :slight_smile:

2 Likes

Indeed they are - thanks!

2 Likes

Might this still be happening with LiveView 0.19.x? We’re hitting this with tests instrumenting UploadClient