测试POST ActionDispatch :: Http :: Parameters :: ParseError:765

时间:2018-03-01 16:10:27

标签: ruby-on-rails-5.1

它说我的参数中有一个意外的标记。

"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

现在这就是奇怪的事。如果我没有标题,它可以解析那些参数。

2 个答案:

答案 0 :(得分:8)

删除'Content-Type' => 'application/json'解决了问题。

最后记得ActionDispatch使用标头知道如何解析params。 'Content-Type' => 'application/json'是标准的样板文件,当使用这种方式时,可以使用GET请求和查询参数,但不能使用POST

答案 1 :(得分:2)

如果您仍然想要'Content-Type' => 'application/json': 您应该将参数传递给raw_post,并在传递的参数上调用#to_json

赞:

    let(:raw_post) { params.to_json }