在PhoenixFramework中接收控制器测试中的参数

时间:2016-07-27 14:03:13

标签: elixir phoenix-framework

我在测试控制器发送params时遇到了一些麻烦: 我发送以下地图:

params = %{
  "filter" => %{
    "type" => "all",
    "conditions" => [
      %{"column" => "price", "comparator" => "equals", "value" => "120", "type" => "number"} 
    ]
  } 
}
电话中的

conn = get conn, property_path(conn, :index, params)

但是在控制器中,当我检查收到的参数时,我得到:

%{
  "filter" => %{
    "conditions" => [
      %{"column" => "price"},
      %{"comparator" => "equals"}, 
      %{"type" => "number"}, 
      %{"value" => "120"}
    ],
    "type" => "all"
  }
}

数组中的单个项目已转换为数组,每个键/值都是一个地图本身。有没有办法获得与控制器参数相同的地图?

1 个答案:

答案 0 :(得分:1)

正如JoséValim在issue中创建的Plug中回复的那样,由于编码列表时存在一些歧义,因此无法进行有效编码。

解决方案是使用地图而不是列表对参数进行编码:

params = %{
   "filter" => %{
     "type" => "all",
     "conditions" => %{
        0 => %{"column" => "price", "comparator" => "equals", "value" => "120", "type" => "number"}
     }
   }
 }