如何测试期望通过POST请求接收JSON数组的控制器动作?

时间:2018-10-13 14:07:11

标签: json rest testing elixir phoenix-framework

这应该很简单,但是我不知道该怎么办。我有一个像这样的控制器动作:

def submit(conn, %{"id" => id, "_json" => results}) do
...
end

_jsonPlug.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数据并编写测试?

1 个答案:

答案 0 :(得分:1)

如@AlekseiMatiushkin在评论中所述,传入的JSON应该是post的参数,而不是experiment_path的参数。

这有效:

    post(
      conn,
      experiment_path(conn, :submit, "123"),
      %{
        "_json" => [%{"a" => 1, "b" => 2}, %{"a" => 3, "b" => 4}]
      }
    )