Проверка GET-запроса Rails rspec на индекс Grape завершилась неудачно - возвращает пустой массив - PullRequest
0 голосов
/ 30 мая 2019

Я создал конечную точку в grape, которая возвращает значение (пример ниже), которое после введенного shop_code возвращает некоторые значения в виде JSON (вывод чванства ниже) - другое приложение должно получить эти данные.Я тестирую его в Swagger, и он отлично работает, однако мои спецификации не сработали и возвращает ошибку

фактическая коллекция содержит: []

Это мой первый разкогда я использую виноград, так что в первый раз, когда я должен написать какой-то тест на нем тоже.

correct swagger output

{
  "data": [
    {
      "id": "1",
      "type": "inquiry",
      "attributes": {
        "reference_id": 1,
        "post_code": "99312",
        "intended_use": "Other",
        "amount": 2000,
        "remaining_time": "2019-07-16"
      }
    }
  ]
}

v1/controller/inquiries/data/index.rb

class Index < Base
          params do
            requires :shop_code, type: String
          end

          helpers do
            def find_inquiries
              shop = Shop.find_by(code: params[:shop_code])
              Inquiry.joins(:shop_offers)
                     .where('shop_offers.shop_suggestion_id = ?', shop)
                     .includes(:process)
            end
          end

          get :export_data do
            skip_authorization

            ::Inquiries::DataSerializer.new(find_inquiries)
          end

характеристики

describe API::V1::Inquiries::Data::Index, type: :request do
  subject(:call) { get endpoint, params: params }
# tons of 'let' which are not the case in this example
  let(:endpoint) { "/api/v1/inquiries/data?shop_code=#{shop.code}" }
  let(:shop) { create(:shop, code: '10011001')}
  let(:params) { { shop_code: '10011001' } }

  describe 'data' do
    subject(:data) { json_response_body['data'] }

    let(:expected_data) do
      [
        {
          "id": inquiry.id,
          "type": 'inquiry',
          "attributes": {
            "reference_id": inquiry.id,
            "post_code": '33445',
            "intended_use": 'Other',
            "amount": 2000,
            "remaining_time": process.order_date
          }
        }
      ]
    end

    it 'returns expected value' do
      call
      expect(data).to match_array(expected_data)
    end
  end
end

Я думал, что 'неверный URL в :endpoint, но swagger показывает мне этот путь для shop_code = 06671403 http://localhost:3000/api/v1/inquiries/data?shop_code=06671403

...