Ruby on rails 测试中ActionController::参数的比较
有一个测试是比较参数。在rails 5Ruby on rails 测试中ActionController::参数的比较,ruby-on-rails,rspec,ruby-on-rails-5,rspec-rails,Ruby On Rails,Rspec,Ruby On Rails 5,Rspec Rails,有一个测试是比较参数。在rails 5params中,对象已经存在,并且该对象的参数中的每个新散列都存在。如何比较这些参数 我得到这个错误 Failure/Error: expect(session[:last_ticket_search]).to eq(params) expected: <ActionController::Parameters {"q"=>{"ticket_number_eq"=>"123-123-123"}, "advanced_search"
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"],
索引操作
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
我认为您不需要在测试请求中提供params术语。试一试
get :index, advanced_search: 't', search_id: search.id, q: {ticket_number_eq: '123-123-123'}, selected_columns: ['ticket_number', 'our_service_areas']
修正了测试,可能我做错了,你怎么说
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
请显示控制器代码。@margo编辑了问题。
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