채널 테스트에서 ecto 구조체를 json 응답에 자동으로 직렬화하는 방법은 무엇입니까? 내가 documentation에서 볼 수 있듯이 answer과 tutorial에서 내가 Poison.Encoder
을 사용할 때 모델에서 트랜스 포트를 통해 전달 된 메시지가 인코딩되어야한다는 것을 알았습니다.Phoenix.Secket.Broadcast 페이로드에서 struct를 테스트하거나 직렬화하는 방법은 무엇입니까?
예 모델 : 채널 기능 중 하나
use PhoenixTrello.Web, :model
# ...
@derive {Poison.Encoder, only: [:id, :first_name, :last_name, :email]}
# ...
end
방송 : 마지막으로
broadcast_from! socket, "card:created", %{card: card}
테스트에 방송에서 페이로드를받을 시도 :
assert_receive %Phoenix.Socket.Broadcast{topic: ^t1, event: "card:created", payload: ^payload}
다음이 일치하지 상승하면 페이로드 직렬화되지 않은 구조체 오류 (필자는 파생 된 모델 filelds 일치하도록 노력하고있어) : 0 는 클라이언트 응용 프로그램 인 것처럼
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"}
어떻게 시험에 직렬화 된 JSON 메시지를 얻으려면?
가 왜'Phoenix.Socket.Broadcast'를받을 클라이언트를 기대합니까?! 우리가 물러서는 "Hello world"를 할 때, 우리 동료들은 물러나는 자체가 아닌 "Hello world"라는 단일 메시지를 듣게됩니다. – mudasobwa