Как проверить действие контроллера, которое ожидает получить массив JSON через запрос POST? - PullRequest
0 голосов
/ 13 октября 2018

Это должно быть просто, но я просто не могу понять, что я должен делать.У меня есть действие контроллера, подобное этому:

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контроллером и напиши тест?

1 Ответ

0 голосов
/ 13 октября 2018

Как упомянул @AlekseiMatiushkin в комментариях, входящий JSON должен быть аргументом post, а не experiment_path.

Это сработало:

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