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年前。你是想链接到其他东西吗?哦,该死,只看到了一天和一个月,而不是一年。英雄联盟