Skip to main content
 首页 » 编程设计

ruby-on-rails-4中如何测试请求规范的 api 响应的键和值

2025年01月19日10jackei

我正在编写请求规范,但无法以 json 格式测试 api 响应。我正在使用 capybarafabricator,这是我尝试的代码...

    context 'discounts in api' do 
      let(:user) { Fabricate(:user, activated: true) } 
      let(:api_token) { user.api_token } 
 
      before { visit api_url_for('/v1/discount_coupons', api_token) } 
 
      it 'returns coupons collection' do 
        Fabricate(:discount_coupon, code: 'Discount One', global: true) 
 
        save_screenshot("tmp/capybara/screenshot-#{Time::now.strftime('%Y%m%d%H%M%S%N')}.png") 
        save_and_open_page 
 
 
        expect(json_response['total_records']).to eq 1 
        expect(json_response['total_pages']).to eq 1 
        expect(json_response['page']).to eq 0 
        expect(json_response['discount_coupons'].size).to eq 1 
        expect(json_response['discount_coupons'][0]['code']).to eq 'Discount One' 
      end 
end 

我得到的回复是这样的

{"discount_coupons":[{"id":11,"code":"Discount One","type":"DiscountPercentage","amount_off":1.5,"global":true,"expires_on":null,"vendors":[]}],"page":0,"total_pages":1,"total_records":1} 

并且错误阻止了我运行成功的测试,

Failure/Error: expect(json_response['total_pages']).to eq 1 
             NoMethodError: 
               undefined method `body' for nil:NilClass  

我认为我对 json_response 的期望是错误的或缺少某些内容,有人可以帮助我以漂亮的方式做到这一点吗?提示我如何使用键和值进行测试。

请您参考如下方法:

测试 API 的最佳方法是使用 rspec,因为您只需要这样做:

it "should return the expected information" do 
  get "/url" 
 
  parsed_response = JSON.parse(response.body) 
  expect(parsed_response["key"]).to eq(whatever) 
end 
 
it "should update the expected entity" do 
  post "/url", body, headers 
 
  parsed_response = JSON.parse(response.body) 
  expect(parsed_response["key"]).to eq(whatever) 
end 

并且您的测试失败,因为您正在尝试解析空响应。 Fabric 可能会失败或者调用可能是错误的。