Я создал конечную точку в 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