Rails Rspec 单元测试 验证接口返回格式
Posted iwangzheng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Rails Rspec 单元测试 验证接口返回格式相关的知识,希望对你有一定的参考价值。
如何在单元测试中测试接口返回的字段?
如果我们有一个api的entity为 employment.rb
# frozen_string_literal: true module API::Entities::BorrowerEntities class Employment < API::Entity param :in_type_id, safe_path: %i[primary_income_source id] param :aaa_type, safe_path: %i[employed_code] param :started_with_employer, safe_path: %i[started_with_employer] end end
let(:default_headers) { { ‘CONTENT_TYPE‘ => ‘application/json‘ } }
it ‘xxx xxx‘ do
headers = { ‘Authorization‘ => bearer_token_for(xixi.account) }.merge(default_headers)
put ‘/api/v1/tester/aaa‘, sample_entity_with(‘aaa_type‘ => ‘Self-aaa‘).to_json, headers
expected_presenter = API::Entities::BorrowerEntities::Employment.represent(tester.account.current_aaa_detail)
expect(response_body).to eq(JSON.parse(expected_presenter.to_json))
end
详细的例子:
Grape API Entity has a "represent" method that can be useful in specs scenarios when we expect some object to be presented with some specific entity, for example when we have: present user, with: API::Entities::User We are actually saying: API::Entities::User.represent(current_user) and this will give us an object like this: #<API::Entities::User:0x00007fe6aab82868 @object= #<User:0x00117fe6aab82ee8 id: 35345, name: "Test", email: "test@example.com", created_at: Mon, 14 Oct 2019 21:57:54 UTC +00:00, updated_at: Mon, 14 Oct 2019 21:57:54 UTC +00:00, @options={}> Then in our spec scenario, we can call to_json from here and use it as a expected from the response of an API call like: get ‘/api/v3/user‘ expected_json = API::Entities::User.represent(current_user).to_json expect(response.body).to eq(expected_json)
以上是关于Rails Rspec 单元测试 验证接口返回格式的主要内容,如果未能解决你的问题,请参考以下文章
Rails, Restful Authentication & RSpec - 如何测试需要身份验证的新模型
模拟 Rails.env.development?使用 rspec