【问题标题】:Render the full Json array in response.body在 response.body 中渲染完整的 Json 数组
【发布时间】:2015-04-19 21:32:25
【问题描述】:

这个测试一直失败我不知道该怎么办。我猜想解决方法是渲染原始 Json 数组,但我完全迷失了。

错误

NoMethodError: undefined method []' for nil:NilClass /Users/newuser/railschallenge-city-watch/test/api/emergencies_create_test.rb:10:inblock in '

紧急情况控制员

def create
    @emergency = Emergency.new(emergency_params)
    if @emergency.save
        render  json: @emergency.to_json , :status => 201
    end 

end


test 'POST /emergencies/ simple creation' do
post '/emergencies/', emergency: { code: 'E-99999999', fire_severity: 1,          police_severity: 2, medical_severity: 3 }
json_response = JSON.parse(response.body)

assert_equal 201, response.status
assert_equal nil, body['message']
assert_equal 'E-99999999', json_response['emergency']['code']
assert_equal 1, json_response['emergency']['fire_severity']
assert_equal 2, json_response['emergency']['police_severity']
assert_equal 3, json_response['emergency']['medical_severity']

结束

【问题讨论】:

  • json_response['emergency'] 为零。打印 json_response 值进行调试。
  • 这是编写测试的方式,它正在寻找这个:emergency ={code:" E-99999999'", fire_severity = "1 ", police_severity:" 2" , medical_severity = " 3"}从字面上看,但它收到这个:{code:“E-99999999'”,fire_severity =“1”,police_severity:“2”,medical_severity =“3”}我正在尝试一种方法让第一个输出呈现原始JSON,或者至少我是这么想的。我真的不知道我以前从来没有在合法的层面上搞过 JSON。

标签: ruby-on-rails integration-testing


【解决方案1】:

试试这个:

render json: @emergency.to_json(:root => "emergency"), :status => 201

【讨论】:

  • 谢谢你,你给了我一个很棒的想法,我试过了,但它没有用,但是你的思考过程完全帮助了我。
【解决方案2】:
render  json: {"emergency" => @emergency}.to_json , :status => 201

【讨论】:

  • 这个解决方案非常难看。 ://
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-14
  • 1970-01-01
  • 1970-01-01
  • 2015-05-21
  • 2016-02-21
相关资源
最近更新 更多