为什么我的负载中的数组在 Sinatra / Rack::Test 中被展平了?
Why is an Array in my payload being flattened in Sinatra / Rack::Test?
我正在尝试使用 rspec 测试一个小型 Sinatra 应用程序。我想传递一个相当复杂的有效负载,并且 运行 正在处理我不理解的问题:我的有效负载包含一个哈希数组。当我 运行 实际应用程序将按预期工作时,但是当我使用 post
助手来 运行 我的测试时,数组将包含一个合并的散列:
post(
"/#{bot}/webhook",
sessionId: "test-session-#{session_counter}",
result: {
contexts: [
{ some: 'fixture' },
{ name: 'generic', parameters: { facebook_sender_id: 'zuck-so-cool' } }
]
}
)
在 sinatra 处理程序中,我使用 params
访问此有效负载:
post '/:bot/webhook' do |bot|
do_something_with(params)
end
当我现在 运行ning 测试套件时查看参数的结构时,我会看到以下结构:
[{"some" => "fixture", "name" => "generic", "parameters" => {"facebook_sender_id" => "zuck-so-cool"}}]
这个我不是很懂。这是一个语法问题吗(我是一个 ruby 菜鸟),我使用 params
是错误的,还是这是一个错误?
EDIT:所以我发现这是一个 "issue",Rack::Test
会在未指定如何序列化给定有效负载时(即作为表单数据)。如果我通过 JSON 并通过正确的 headers 它将执行我期望的操作:
post(
"/#{bot}/webhook",
{
sessionId: "test-session-#{session_counter}",
result: {
contexts: [
{ some: 'fixture' },
{ name: 'generic', parameters: { facebook_sender_id: 'zuck-so-cool' } }
]
}
}.to_json,
{ 'HTTP_ACCEPT' => 'application/json', 'CONTENT_TYPE' => 'application/json' }
)
我仍然不确定这是无法将传递的数据结构序列化为表单数据的问题,还是 Rack::Test
序列化数据的方式存在错误。
查看 the relevant portion of the specs 看起来这是预期的行为。
我正在尝试使用 rspec 测试一个小型 Sinatra 应用程序。我想传递一个相当复杂的有效负载,并且 运行 正在处理我不理解的问题:我的有效负载包含一个哈希数组。当我 运行 实际应用程序将按预期工作时,但是当我使用 post
助手来 运行 我的测试时,数组将包含一个合并的散列:
post(
"/#{bot}/webhook",
sessionId: "test-session-#{session_counter}",
result: {
contexts: [
{ some: 'fixture' },
{ name: 'generic', parameters: { facebook_sender_id: 'zuck-so-cool' } }
]
}
)
在 sinatra 处理程序中,我使用 params
访问此有效负载:
post '/:bot/webhook' do |bot|
do_something_with(params)
end
当我现在 运行ning 测试套件时查看参数的结构时,我会看到以下结构:
[{"some" => "fixture", "name" => "generic", "parameters" => {"facebook_sender_id" => "zuck-so-cool"}}]
这个我不是很懂。这是一个语法问题吗(我是一个 ruby 菜鸟),我使用 params
是错误的,还是这是一个错误?
EDIT:所以我发现这是一个 "issue",Rack::Test
会在未指定如何序列化给定有效负载时(即作为表单数据)。如果我通过 JSON 并通过正确的 headers 它将执行我期望的操作:
post(
"/#{bot}/webhook",
{
sessionId: "test-session-#{session_counter}",
result: {
contexts: [
{ some: 'fixture' },
{ name: 'generic', parameters: { facebook_sender_id: 'zuck-so-cool' } }
]
}
}.to_json,
{ 'HTTP_ACCEPT' => 'application/json', 'CONTENT_TYPE' => 'application/json' }
)
我仍然不确定这是无法将传递的数据结构序列化为表单数据的问题,还是 Rack::Test
序列化数据的方式存在错误。
查看 the relevant portion of the specs 看起来这是预期的行为。