Wie automatisch Ecto-Struktur zu JSON Antwort im Kanaltest serialisieren? Wie ich in documentationThe event’s message must be a serializable map
sehen kann, fand ich in answer und in tutorial, dass, wenn ich Poison.Encoder
im Modell verwende, jede über Transport (wie ich verstehe) weitergegebene Schicht kodiert werden sollte.Wie kann man die Struktur in Phoenix.Sticket.Broadcast Payload testen oder serialisieren?
Beispielmodell:
use PhoenixTrello.Web, :model
# ...
@derive {Poison.Encoder, only: [:id, :first_name, :last_name, :email]}
# ...
end
Uebertragung von einem der Kanalfunktionen:
broadcast_from! socket, "card:created", %{card: card}
schließlich versucht Nutzlast von Broadcast in Test zu erhalten:
assert_receive %Phoenix.Socket.Broadcast{topic: ^t1, event: "card:created", payload: ^payload}
dann steigt sie nicht überein Fehler bei nicht serialisierter Struktur in Payload (Ich versuche, nur abgeleitete Modellfilel zu finden):
Process mailbox:
%Phoenix.Socket.Broadcast{event: "card:created", payload: %{card: %PhoenixTrello.Card{__meta__: #Ecto.Schema.Metadata<:loaded, "cards">, ... user: #Ecto.Association.NotLoaded<association :user is not loaded>, user_id: 1833}}, topic: "boards:1833"}
Wie erhalten serialisierte JSON-Nachricht im Test, als ob es die Client-App war?
Warum erwarten Sie einen Client 'Phoenix.Socket.Broadcast' erhalten ?! Wenn wir "Hello world" megeln, hören unsere Kollegen die "Hello world" -Nachricht, anstatt vom Megaphon selbst gestochen zu werden :) – mudasobwa