rspec如何用body和header测试http调用

时间:2014-05-09 17:45:52

标签: ruby-on-rails ruby rspec

我正在使用rails4 + rspec 3.我想进行HTTP调用,并传递两个参数(例如JSON正文或查询字符串)以及HTTP标头。我能够通过这两个中的一个,但不是两个。

当我尝试类似的事情时:

post api_v1_post_path(@myid), {} , {"X-Some-Header" => "MyValue"} 

它工作正常,标题很好,但如果我做了类似的事情:

post api_v1_post_path(@myid), {"myparam" => "myvalue"} , {"X-Some-Header" => "MyValue"} 

我收到以下错误:

Failure/Error: post api_v1_post_path(@myid), {"myparam" =>"myvalue"}, headers
 ActionDispatch::ParamsParser::ParseError:
   795: unexpected token at 'myparam'

有什么想法吗?

1 个答案:

答案 0 :(得分:4)

似乎POST参数是JSON编码的。当应用程序尝试JSON解码未编码的参数时,会导致795: unexpected token at 'myparam'

.to_json与post params一起使用。

post api_v1_post_path(@myid), {"myparam" => "myvalue"}.to_json , {"X-Some-Header" => "MyValue"}

您可能想要使用let:

describe 'Test' do
  let( :params  ){{ myparam: 'myvalue' }}
  let( :headers ){{ 'X-Some-Header' => 'MyValue' }}

  it 'succeeds' do
    post api_v1_post_path(@myid), params.to_json , headers