Rspec;如何在体内包含参数

时间:2019-02-15 22:25:03

标签: ruby-on-rails-3 rspec

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应该通过,并且分页参数包含在体内。

1 个答案:

答案 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
相关问题