【问题标题】:Testing POST ActionDispatch::Http::Parameters::ParseError: 765测试 POST ActionDispatch::Http::Parameters::ParseError: 765
【发布时间】:2018-03-01 16:10:26
【问题描述】:

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

"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

这就是奇怪的地方。如果我不给它标题,解析这些参数就没有问题。

【问题讨论】:

    标签: rspec ruby-on-rails-5.1


    【解决方案1】:

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

    终于记得 ActionDispatch 使用 headers 来知道如何解析 params。 'Content-Type' => 'application/json' 是一个标准样板文件,可以与GET 请求和查询参数一起使用,但在以这种方式使用时不能与POST 一起使用。

    【讨论】:

    • 感谢您发布此信息 - 我觉得我正在服用疯狂的药丸。你救了我??
    • 这不是正确的答案。而不是删除 Content-Type 你应该在你的请求规范中发布一个 json 而不是一个 ruby​​ 哈希
    • @DenniJensen 根据文档,您是对的relishapp.com/rspec/rspec-rails/docs/request-specs/…params.to_json 似乎。待我有时间去验证并更新答案。
    【解决方案2】:

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

    喜欢:

        let(:raw_post) { params.to_json }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-27
      • 2014-07-16
      • 2020-11-19
      • 1970-01-01
      • 2013-03-05
      • 1970-01-01
      • 2011-05-29
      • 1970-01-01
      相关资源
      最近更新 更多