2017-07-19 1 views
0

ユニットテストをphoenixフレームワークに書くときに、jsonレスポンスにリストが含まれているかどうかを確認する方法を教えてください。ユニットテストでは、jsonレスポンスにリストが含まれていることをアサートします。

childrenが入力されるため、既存のテストは失敗します。私はちょうど私のjson応答がchildrenchildrenがリストであることを私に伝えたいと思う。この試験は、マップが含まれていても通過すること

assert %{"id" => id, "children" => children} = json_response(conn, 200)["data"] 
assert id == parent.id 
assert is_list(children) 

test "shows chosen resource", %{conn: conn} do 
    parent = Repo.insert! %Parent{} 
    conn = get conn, parent_path(conn, :show, parent) 
    assert json_response(conn, 200)["data"] == %{"id" => parent.id, 
    "children" => []} 
end 

答えて

1

I三を使用するには、基本的な構造を主張し、idchildrenを抽出する第アサートパターンマッチを用い、これをアサートidchildren以外のキー

2

[json schema] [2]を使用すると、完全なjson構造を検証するために(https://github.com/jonasschmidt/ex_json_schema)で使用するjsonを生成できます。

iex> schema = %{ 
    "type" => "object", 
    "properties" => %{ 
    "foo" => %{ 
     "type" => "string" 
    } 
    } 
} |> ExJsonSchema.Schema.resolve 

iex> ExJsonSchema.Validator.valid?(schema, %{"foo" => "bar"}) 

がテストごとに1つだけの論理的主張を持って覚えている」(http://blog.stevensanderson.com/2009/08/24/writing-great-unit-tests-best-and-worst-practises/

関連する問題