在phoenix框架中编写单元测试时,如何检查json响应是否包含列表。
现有测试失败,因为children
已填充。我只想让测试告诉我,我的json响应包含children
,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
答案 0 :(得分:2)
我会为此使用三个断言,首先使用模式匹配断言来断言基本结构并提取id
和children
:
assert %{"id" => id, "children" => children} = json_response(conn, 200)["data"]
assert id == parent.id
assert is_list(children)
请注意,即使地图包含id
和children
以外的其他键,此测试也会通过。
答案 1 :(得分:2)
使用[json schema] [2],您可以生成一个与(https://github.com/jonasschmidt/ex_json_schema)一起使用的json来验证完整的json结构。
iex> schema = %{
"type" => "object",
"properties" => %{
"foo" => %{
"type" => "string"
}
}
} |> ExJsonSchema.Schema.resolve
和
iex> ExJsonSchema.Validator.valid?(schema, %{"foo" => "bar"})
并记住每个测试只有一个逻辑断言“(http://blog.stevensanderson.com/2009/08/24/writing-great-unit-tests-best-and-worst-practises/)