1

响应正文返回“带有葡萄实体的格式化 json”,但 first_prefered 返回完整对象(json 格式)。

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

精选HomekeeperResponseEntity:

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
4

2 回答 2

3

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

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

将返回您的演示者对象。

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

应该返回你想要的 json。

于 2014-10-26T07:58:20.540 回答
3

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

于 2014-10-26T08:09:25.013 回答