簡體   English   中英

測試中參數ActionController :: Parameters的比較

[英]Comparison of parameters ActionController::Parameters in the tests

有一項測試比較參數。 在rails中已經有5個params對象,並且此對象的參數中每個新的哈希值。 如何比較這些參數?

我得到這個錯誤。

 Failure/Error: expect(session[:last_ticket_search]).to eq(params)

   expected: <ActionController::Parameters {"q"=>{"ticket_number_eq"=>"123-123-123"}, "advanced_search"=>"t", "selected_columns"=>["ticket_number", "our_service_areas"], "commit"=>"Apply"} permitted: false>
        got: {:q=><ActionController::Parameters {"ticket_number_eq"=>"123-123-123"} permitted: false>, :advanced_search=>"t", :selected_columns=>["ticket_number", "our_service_areas"], :commit=>"Apply"}

   (compared using ==)

   Diff:
   @@ -1,2 +1,5 @@
   -<ActionController::Parameters {"q"=>{"ticket_number_eq"=>"123-123-123"}, "advanced_search"=>"t", "selected_columns"=>["ticket_number", "our_service_areas"], "commit"=>"Apply"} permitted: false>
   +:advanced_search => "t",
   +:commit => "Apply",
   +:q => <ActionController::Parameters {"ticket_number_eq"=>"123-123-123"} permitted: false>,
   +:selected_columns => ["ticket_number", "our_service_areas"],

在這個測試中。

it 'will save last search params to session when saved advanced search is applied' do
  search = FactoryGirl.create(:search, account: @account)

  get :index, params: {advanced_search: 't', search_id: search.id, q: {ticket_number_eq: '123-123-123'}, selected_columns: ['ticket_number', 'our_service_areas']}

  params = {
    advanced_search: 't',
    search_id: search.id.to_s,
    selected_columns: ['ticket_number', 'our_service_areas'],
    q: {'ticket_number_eq' => '123-123-123'}
  }


  expect(session[:last_ticket_search]).to eq(params)
end

索引動作。

def index
  authorize Ticket

  @search = current_account.searches.find_by(id: params[:search_id])
  @autorefresh_interval = autorefresh('tickets')

  @q = policy_scope(Ticket).ransack(params[:q])

  if params[:q].blank? && params[:advanced_search].blank?
    @q.add_default_condition('status', 'in', 'open')
    session[:last_ticket_search] = nil
  else
    # This is required for Chrome to redirect back to the applied search.
    # Firefox and Edge act a bit different than Chrome and do that without this
    # when using the back link functionality in navigation.coffee.
    session[:last_ticket_search] = {q: params[:q]}
    if params[:advanced_search].present?
      session[:last_ticket_search].merge!(advanced_search: 't', selected_columns: params[:selected_columns])
      session[:last_ticket_search].merge!(params[:search_id].present? ? {search_id: params[:search_id]} : {commit: 'Apply'})
    end
  end

  @selected_columns = selected_columns
  @tickets = @q.result.select('tickets.*')
                      .includes(:account, :ticket_responses, :assignee, :tags)
                      .order('tickets.created_at DESC')
                      .group('tickets.id')
                      .paginate(page: params[:page], per_page: per_page('tickets'))
end

修復測試,因為它發生了,也許我做錯了,您怎么說?

it 'will save last search params to session when advanced search is applied' do
  get :index, params: {advanced_search: 't', q: {ticket_number_eq: '123-123-123'}, selected_columns: ['ticket_number', 'our_service_areas']}

  params = {
    q: ActionController::Parameters.new('ticket_number_eq' => '123-123-123'),
    advanced_search: 't',
    selected_columns: ['ticket_number', 'our_service_areas'],
    commit: 'Apply'
  }

  expect(session[:last_ticket_search]).to eq(params)
end

我認為您不需要在測試請求中提供params術語。 嘗試

get :index, advanced_search: 't', search_id: search.id, q: {ticket_number_eq: '123-123-123'}, selected_columns: ['ticket_number', 'our_service_areas']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM