我有以下凤凰频道处理传入的消息,广播它,然后更新频道实例的socket
状态:
defmodule MyApp.MyChannel do
use MyApp.Web, :channel
def join("topic", _payload, socket) do
{:ok, socket}
end
def handle_in("update", %{"new_number" => number_}, socket) do
broadcast socket, "update", %{"new_number" => number_}
{:noreply, assign(socket, :current_number, number_)}
end
...
end
我试图handle_in("update", ...)
通过这个测试用例测试函数的行为:
test "should broadcast new number and update the relevant instance's socket state", %{socket: socket} do
push socket, "update", %{"new_number" => 356}
assert_broadcast "update", %{"new_number" => 356}
## This is testing against the old state
## which is going to obviously fail
assert socket.assigns[:current_number] == 356
end
这里的问题是我找不到socket
在测试用例中获取新更新状态的方法。
模块中没有
assert_socket_state
函数,Phoenix.ChannelTest
我找不到任何允许获取最新套接字状态的函数我考虑过定义 a
handle_call
或 ahandle_info
来返回套接字状态,但这意味着我必须获取通道的 pid 才能调用它们。我考虑过
handle_in
为此目的定义一个,但我不想在我的频道中放入一个将在生产中可用的自省工具。
推送消息后,如何 socket
在测试用例中获取更新?