3

问候凤凰 LiveView 奇才!

语境

我们有一个基本的 LiveView 计数器应用程序:https
://github.com/dwyl/phoenix-liveview-counter-tutorial 代码非常简单: 该应用程序按预期工作,请参阅:https://live-view-counter.herokuapp .com/live/counter.ex

测试文件是: 我们一直试图在测试中调用该函数。 所以我们的项目中有未经测试的代码。这是不可取的。 见:https ://codecov.io/gh/dwyl/phoenix-liveview-counter-tutorial/src/master/lib/live_view_counter_web/live/counter.extest/live_view_counter_web/live/counter_test.exs
handle_info/2

柜台未覆盖

我们已经阅读了官方文档https://hexdocs.pm/phoenix_live_view/Phoenix.LiveViewTest.html
但无法理解如何去做。我们缺少什么?

我们真的很想LiveView在我们的“真实”项目中使用,但我们想确保我们的LiveView应用程序经过全面测试。

问题

我们如何编写一个测试来调用该handle_info/2函数?

4

2 回答 2

3

经过大量研究、反复试验、错误、错误(迭代),我们提出了以下测试:

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

于 2020-03-25T15:45:22.577 回答
1

handle_info/2是 的一般行为Genserver。如果您阅读文档,您会发现:

除了 和 提供的同步和异步通信之外,由 call/3cast/2等函数发送的“常规”消息 可以在回调中处理。Kernel.send/2Process.send_after/4handle_info/2

因此,只要您知道pid流程,您就可以发送其中任何一个。

于 2020-03-25T14:34:54.977 回答