gpt4 book ai didi

ruby - 为什么我的负载中的数组在 Sinatra/Rack::Test 中被展平了?

转载 作者:太空宇宙 更新时间:2023-11-03 16:16:27 24 4
gpt4 key购买 nike

我正在尝试使用 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

当我现在在运行测试套件时查看参数的结构时,我会看到以下结构:

[{"some" => "fixture", "name" => "generic", "parameters" => {"facebook_sender_id" => "zuck-so-cool"}}]

我不是很懂。这是一个语法问题(我是一个 ruby​​ 菜鸟),我使用的 params 是错误的,还是这是一个错误?

编辑:所以我发现这是一个“问题”,即 Rack::Test 在未指定如何序列化给定负载时(即作为表格数据)。如果我传递 JSON 并传递正确的 header ,它将执行我期望的操作:

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看起来这是预期的行为。

关于ruby - 为什么我的负载中的数组在 Sinatra/Rack::Test 中被展平了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43292206/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com