Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Elixir PHOENIX框架中控制器测试中的接收参数_Elixir_Phoenix Framework - Fatal编程技术网

Elixir PHOENIX框架中控制器测试中的接收参数

Elixir PHOENIX框架中控制器测试中的接收参数,elixir,phoenix-framework,Elixir,Phoenix Framework,我在测试控制器发送参数时遇到一些问题: 我正在发送以下地图: params = %{ "filter" => %{ "type" => "all", "conditions" => [ %{"column" => "price", "comparator" => "equals", "value" => "120", "type" => "number"} ] } } 在通话中: conn = get c

我在测试控制器发送参数时遇到一些问题: 我正在发送以下地图:

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"
  }
}

数组中的单个项被转换为一个数组,每个键/值本身就是一个映射。有没有办法获得与控制器参数相同的映射?

正如JoséValim在中创建的中回答的那样,不可能有效编码,因为在编码列表时存在一些歧义

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

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

这可能是个bug。下面是PHP的
http\u build\u query
为相同数据生成的查询-。Phoenix几乎正确地解析了这一点(它返回一个键为“0”的映射,而不是一个列表)。
Plug.Conn.Query.encode(%%a:[%{b:2,c:3}]})==Plug.Conn.Query.encode(%%a:[%{b:2},%%c:3}}}}}})\true
有一个拉取请求显然解决了这个问题:当前数据中没有最新版本,但应该是在下一个:这看起来像公关最初增加了功能2年前。你是想链接到其他东西吗?哦,该死,只看到了一天和一个月,而不是一年。英雄联盟