如何测试期望通过 POST 请求接收 JSON 数组的控制器操作?
How to test a controller action that expects to receive a JSON array via a POST request?
这应该很简单,但我只是不知道我应该做什么。我有一个这样的控制器动作:
def submit(conn, %{"id" => id, "_json" => results}) do
...
end
(_json
键由 Plug.Parsers.JSON
在传入的 JSON 数组上自动生成)
我想测试一下。但是,如果我写
post(conn, experiment_path(conn, :submit, %{})),
或类似
post(
conn,
experiment_path(conn, :submit, %{
"id" => "123",
"_json" => [%{"a" => 1, "b" => 2}, %{"a" => 3, "b" => 4}]
})
)
我明白了
** (ArgumentError) maps cannot be converted to_param. A struct was expected, got: %{:_json => %{}, "id" => "123"}
烦人的是我不确定这里到底需要什么类型的结构。我搜索了一下,但大多数在线资源似乎都在谈论如何测试 发送 JSON 响应,而不是如何接收 JSON 数据。
控制器接收到的JSON数据应该如何正确指定并编写测试?
正如@AlekseiMatiushkin 在评论中提到的,传入的 JSON 应该是 post
的参数,而不是 experiment_path
.
的参数
这有效:
post(
conn,
experiment_path(conn, :submit, "123"),
%{
"_json" => [%{"a" => 1, "b" => 2}, %{"a" => 3, "b" => 4}]
}
)
这应该很简单,但我只是不知道我应该做什么。我有一个这样的控制器动作:
def submit(conn, %{"id" => id, "_json" => results}) do
...
end
(_json
键由 Plug.Parsers.JSON
在传入的 JSON 数组上自动生成)
我想测试一下。但是,如果我写
post(conn, experiment_path(conn, :submit, %{})),
或类似
post(
conn,
experiment_path(conn, :submit, %{
"id" => "123",
"_json" => [%{"a" => 1, "b" => 2}, %{"a" => 3, "b" => 4}]
})
)
我明白了
** (ArgumentError) maps cannot be converted to_param. A struct was expected, got: %{:_json => %{}, "id" => "123"}
烦人的是我不确定这里到底需要什么类型的结构。我搜索了一下,但大多数在线资源似乎都在谈论如何测试 发送 JSON 响应,而不是如何接收 JSON 数据。
控制器接收到的JSON数据应该如何正确指定并编写测试?
正如@AlekseiMatiushkin 在评论中提到的,传入的 JSON 应该是 post
的参数,而不是 experiment_path
.
这有效:
post(
conn,
experiment_path(conn, :submit, "123"),
%{
"_json" => [%{"a" => 1, "b" => 2}, %{"a" => 3, "b" => 4}]
}
)