Vys*_*san 5 elixir phoenix-framework
我有一个驱动程序频道,它将其位置广播到供应商频道.
defmodule MyApp.DriverChannel do
#...
def handle_in("transmit", payload, socket) do
MyApp.Endpoint.broadcast! "vendors:lobby", "track", payload
{:noreply, socket}
end
end
defmodule MyApp.DriverChannelTest do
#....
test "location broadcasts to vendors:lobby", %{socket: socket} do
push socket, "transmit", %{"hello" => "all"}
assert_broadcast "track", %{"hello" => "all"}
# Want something like this
# assert_broadcast "vendors:lobby", "track", %{"hello" => "all"}
end
end
Run Code Online (Sandbox Code Playgroud)
这个断言会失败,因为它只检查广播DriverChannel,如何断言广播VendorChannel,我查看了源代码,似乎没有选项传递channel_name给assert_broadcast宏.
[另一个注意事项]我也有控制器播放,如果我知道答案,我也可以断言那些广播!:)
assert_broadcast仅适用于订阅主题,但您可以通过MyApp.Endpoint.subscribe/2直接订阅,并且assert_receive:
test "location broadcasts to vendors:lobby", %{socket: socket} do
MyApp.Endpoint.subscribe(self, "vendors:lobby")
push socket, "transmit", %{"hello" => "all"}
assert_broadcast "track", %{"hello" => "all"}
assert_receive %Phoenix.Socket.Broadcast{
topic: "vendors:lobby",
event: "track",
payload: %{"hello" => "all"}}
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1145 次 |
| 最近记录: |