代码之家  ›  专栏  ›  技术社区  ›  xji Paul Rada

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

  •  0
  • xji Paul Rada  · 技术社区  · 7 年前

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

    (The) _json 密钥由自动生成 Plug.Parsers.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 回复  |  直到 7 年前
        1
  •  2
  •   xji Paul Rada    7 年前

    正如@AlekseiMatiushkin在注释中提到的,传入的JSON应该是 post ,而不是 experiment_path .

    这起作用了:

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