如何在Phoenix LiveView 中测试handle_info/2?
How to test handle_info/2 in Phoenix LiveView?
您好 Phoenix LiveView 向导!
上下文
我们有一个基本的 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
我们已经阅读了官方文档https://hexdocs.pm/phoenix_live_view/Phoenix.LiveViewTest.html
但一直无法理解如何去做。我们缺少什么?
我们真的想在我们的"real"项目中使用LiveView
,但我们想确保我们的LiveView
应用完全 测试。
问题
我们如何编写 test 来调用 handle_info/2
函数?
handle_info/2
is a general behavior of Genserver
。如果您阅读文档,您会发现:
Besides the synchronous and asynchronous communication provided by
call/3
and cast/2
, "regular" messages sent by functions such as
Kernel.send/2
, Process.send_after/4
and similar, can be handled inside
the handle_info/2
callback.
因此,只要您知道流程的 pid
,您就可以发送其中任何一个。
经过大量研究,反复试验,错误,错误(迭代),我们得出了以下测试:
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
您好 Phoenix LiveView 向导!
上下文
我们有一个基本的 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
我们已经阅读了官方文档https://hexdocs.pm/phoenix_live_view/Phoenix.LiveViewTest.html
但一直无法理解如何去做。我们缺少什么?
我们真的想在我们的"real"项目中使用LiveView
,但我们想确保我们的LiveView
应用完全 测试。
问题
我们如何编写 test 来调用 handle_info/2
函数?
handle_info/2
is a general behavior of Genserver
。如果您阅读文档,您会发现:
Besides the synchronous and asynchronous communication provided by
call/3
andcast/2
, "regular" messages sent by functions such asKernel.send/2
,Process.send_after/4
and similar, can be handled inside thehandle_info/2
callback.
因此,只要您知道流程的 pid
,您就可以发送其中任何一个。
经过大量研究,反复试验,错误,错误(迭代),我们得出了以下测试:
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