如何使用Grape Entity请求测试?

时间:2014-10-26 02:43:38

标签: rspec grape-api grape-entity

响应主体使用Grape Entity"返回"格式化json,但first_prefered返回完整对象(json格式)。

如何转换first_prefered对象只是为了使用葡萄实体来获取暴露的字段?

FeaturedHomekeeperResponseEntity:

module API::V1::Entities
  class FeaturedHomekeeperResponseEntity < Grape::Entity
    expose :id, documentation: { type: 'integer', desc: 'ID' }
    expose :featured_type, documentation: { type: 'string', desc: 'Featured Type' }
  end
end

测试:

let(:address) { Fabricate(:address) }

      it 'should return the first prefered homekeeper of an address' do
        first_prefered = Fabricate(:featured_homekeeper_as_first_prefered, address: address)

        get "/api/v1/addresses/#{address.id}/prefered/first"

        expect(json).to eq(YAML.load(first_prefered.to_json))
      end

2 个答案:

答案 0 :(得分:3)

Grape :: Entity类有一个表示方法。所以

API::V1::Entities::FeaturedHomekeeperResponseEntity.represent first_prefered

将返回演示者对象。

 API::V1::Entities::FeaturedHomekeeperResponseEntity.represent(first_prefered).to_json()

应该返回你想要的json。

答案 1 :(得分:3)

我认为您不应该使用Grape :: Entity格式化测试场景中的数据。因为这是一个接受/集成测试,应该从用户的角度编写。它应该包含尽可能少的代码相关的东西。恕我直言,你应该手动从JSON中选择键/值。