我正在失去理智,试图在Sinatra应用程序上解析传入的请求。
这是我的规格
payload = File.read("./spec/support/fixtures/payload.json")
post "/api/v1/verify_payload", { :payload => payload }
last_response.body.must_equal payload
其中只是spec / support / fixtures / payload.json
{"ref":"refs/heads/master"}
我的路线看起来像
post '/verify_payload' do
params = MultiJson.load(request.body.read, symbolize_keys: true)
params[:payload]
end
运行规范我收到以下错误:
MultiJson::LoadError: 795: unexpected token at 'payload=%7B%22ref%22%3A%22refs%2Fheads%2Fmaster%22%7D'
我试图以不同的方式解析身体请求而没有运气。
如何使请求有效JSON?
感谢
答案 0 :(得分:1)
如果要发送JSON编码的POST正文,则必须将Content-Type标头设置为application / json。使用Rack :: Test,你应该能够做到这一点:
post "/api/v1/verify_payload", payload, 'CONTENT_TYPE' => 'application/json'
可替换地:
header 'Content-Type' => 'application/json'
post '/api/v1/verify_payload'
答案 1 :(得分:0)
问题是你传递的是ruby哈希,格式不正确,你应该传递一个json对象。
这样的事情应该有效:
发布" / api / v1 / verify_payload",{:payload => payload.to_json}