2017-08-22 10 views
1

エリクシール/フェニックスとエスペックテストフレームワークを使用して、以下のようにだから私は、テストのセットアップを持っている:私は呼んPlug.Adapters.Test.Conとエリクシール/フェニックスのPUTリクエストのボディを設定する方法

let :response do 
    resp = build_conn() |> put("/kites/#{id_function()}", [horizontal: "more", default: true]) 
    Poison.Parser.parse!(resp.resp_body, keys: :atoms!) 
end 

応答()のようなエラーが発生しました。

** (Poison.EncodeError) unable to encode value: {Plug.Adapters.Test.Conn, %{chunks: nil, method: "PUT", owner: #PID<0.46.0>, params: nil, ref: #Reference<0.0.5.1528>, req_body: ""}} 
     (poison) lib/poison/encoder.ex:354: Poison.Encoder.Any.encode/2 
     (poison) lib/poison/encoder.ex:213: anonymous fn/4 in Poison.Encoder.Map.encode/3 
     (poison) lib/poison/encoder.ex:214: Poison.Encoder.Map."-encode/3-lists^foldl/2-0-"/3 
     (poison) lib/poison/encoder.ex:214: Poison.Encoder.Map.encode/3 
     (poison) lib/poison/encoder.ex:213: anonymous fn/4 in Poison.Encoder.Map.encode/3 
     (poison) lib/poison/encoder.ex:214: Poison.Encoder.Map."-encode/3-lists^foldl/2-0-"/3 
     (poison) lib/poison/encoder.ex:214: Poison.Encoder.Map.encode/3 
     (poison) lib/poison/encoder.ex:213: anonymous fn/4 in Poison.Encoder.Map.encode/3 


1 examples, 1 failures 

Finished in 1.0 seconds (0.76s on load, 0.24s on specs) 

何が起こっていますか? PUTリクエストにパラメータを正しく渡していますか?

+0

が全体のエラーメッセージということですか?テストコードからスタックトレースに行がないことを不思議に思う。 – Dogbert

答えて

1

タプルを取得している間にマップをエンコードしたいと思うように見えます。

あなたは持っている:

{Plug.Adapters.Test.Conn, %{chunks: nil, method: "PUT", owner: #PID<0.46.0>, params: nil, ref: #Reference<0.0.5.1528>, req_body: ""}} 

%{}は、地図で{some_val, %{}とタプル。マップだけをエンコードしたいので、それは第2の要素です。あなたは使用してタプルから2番目の要素を取ることができます:elem(resp.resp_body, 1)

を多分それは動作します:

Poison.Parser.parse!(elem(resp.resp_body, 1), keys: :atoms!) 

それとも、でそれからマップを作成します。

Enum.into(resp.resp_body, %{}) 

をI場合、私はわからないんだけど正しい場所を指していますが、resp.resp_bodyのようなものがあなたの予想よりも多く入っているようです。


もう一つ、覚えているキー::atoms!:some_varは、呼び出しの前に割り当てられていない場合、あなたは引数のエラーメッセージに遭遇する、すなわち、既存の原子を再利用します。

ので、多分ちょうどそれが役立つかもしれ削除:

Poison.Parser.parse!(resp.resp_body) 
+0

質問のエラーは 'Poison.EncodeError'です。 'Poison.Parser.parse! 'でエラーが出るとは思わない。 – Dogbert

+0

助けてくれてありがとう、根本的な原因はEcto.Schemaだったことに終わった。私は解析しようとしていた応答を構築する。 – Nona

関連する問題