Rspec规范在以下测试用例上失败。有人可以帮我在体内发送参数吗?
测试用例:
describe 'POST search' do
it 'renders search' do
request.headers['Content-Type'] = 'application/json'
request.headers['Accept'] = 'application/json'
post :search, body: {name: {query_type: 'match', value: ['xy']} }.to_json
expect(response.status).to eq(200)
expect(response.body.include?('TWEEDLE'))
end
end
控制器:
def search
page_params = pagination_params
query_hash = QueryPreprocessor.params_to_query_with_types(JSON.parse(request.body.read).deep_symbolize_keys)
logger.info "query_hash: #{query_hash}"
es_query_json = Elastic::QueryBuilder.facility_search_v1(query_hash, page_params).to_json
logger.info "es query: #{es_query_json}"
facilities = facility_helper.search es_query_json
json_response build_facilities_response(facilities)
rescue ApiError => e
render json: e.response, status: e.status
end
这些是我想包含在体内的参数,这些参数在控制器中被调用:
def pagination_params
page_params = {}
page_params['size_params'] = params[:size] || 50
page_params['from_params'] = params[:from] || 0
page_params['sort_params'] = params[:sort]
page_params['order_params'] = params[:order]
page_params
end
Rspec应该通过,并且分页参数包含在体内。
答案 0 :(得分:1)
您可以使用“ as::json”发布json。
describe 'POST search' do
it 'renders search' do
request.headers['Content-Type'] = 'application/json'
request.headers['Accept'] = 'application/json'
post :search, params: {name: {query_type: 'match', value: ['xy']} }, as: :json
expect(response.status).to eq(200)
expect(response.body.include?('TWEEDLE'))
end
end