Testing POST ActionDispatch::Http::Parameters::ParseError: 765
Testing POST ActionDispatch::Http::Parameters::ParseError: 765
它说我的参数中有一个意外的标记。
"ActionDispatch::Http::Parameters::ParseError: 765: unexpected token at 'conversation_identifier[participant_list][]=2&conversation_identifier[participant_list][]=1"
为了清晰起见,带有幻数的测试版本:
let(:headers) do
{ 'HTTP_CURRENT_USER_ID' => 2,
'Content-Type' => 'application/json' }
end
let(:params) { { conversation_identifier: { participant_list: [1, 2] } }
it 'is getting testy' do
post resource_url, params: params, headers: headers
assert_equal 201, response.status
end
这就是奇怪的地方。如果我不给它 headers.
,它解析这些参数没有问题
删除 'Content-Type' => 'application/json'
解决了问题。
终于想起 ActionDispatch 使用 headers 来知道如何解析参数。 'Content-Type' => 'application/json'
是一个标准的样板文件,可以与 GET
请求和查询参数一起使用,但不能与 POST
一起使用。
如果你还想要'Content-Type' => 'application/json'
:
您应该将参数传递给 raw_post
并在您传递的参数上调用 #to_json
。
喜欢:
let(:raw_post) { params.to_json }
它说我的参数中有一个意外的标记。
"ActionDispatch::Http::Parameters::ParseError: 765: unexpected token at 'conversation_identifier[participant_list][]=2&conversation_identifier[participant_list][]=1"
为了清晰起见,带有幻数的测试版本:
let(:headers) do
{ 'HTTP_CURRENT_USER_ID' => 2,
'Content-Type' => 'application/json' }
end
let(:params) { { conversation_identifier: { participant_list: [1, 2] } }
it 'is getting testy' do
post resource_url, params: params, headers: headers
assert_equal 201, response.status
end
这就是奇怪的地方。如果我不给它 headers.
,它解析这些参数没有问题删除 'Content-Type' => 'application/json'
解决了问题。
终于想起 ActionDispatch 使用 headers 来知道如何解析参数。 'Content-Type' => 'application/json'
是一个标准的样板文件,可以与 GET
请求和查询参数一起使用,但不能与 POST
一起使用。
如果你还想要'Content-Type' => 'application/json'
:
您应该将参数传递给 raw_post
并在您传递的参数上调用 #to_json
。
喜欢:
let(:raw_post) { params.to_json }