Как опубликовать JSON с ключом «params» в rspec, используя xhr?

#ruby-on-rails #rspec #xmlhttprequest

#ruby-on-rails #rspec #xmlhttprequest

Вопрос:

Я столкнулся с проблемой при тестировании контроллера с использованием xhr.

  it 'send request' do
    do_login :superguru

    xhr :post, :create,
        locale: :en,
        customer_id: customer.id,
        ...
        params: 'some,key'
  end
  

Трассировка стека:

  # /Users/admin/.rvm/gems/ruby-2.4.4@energo/gems/actionpack-4.2.11/lib/action_dispatch/routing/route_set.rb:802:in merge!'
 # /Users/admin/.rvm/gems/ruby-2.4.4@energo/gems/actionpack-4.2.11/lib/action_dispatch/routing/route_set.rb:802:in url_for'
 # /Users/admin/.rvm/gems/ruby-2.4.4@energo/gems/actionpack-4.2.11/lib/action_dispatch/routing/route_set.rb:773:in `path_for'
 # /Users/admin/.rvm/gems/ruby-2.4.4@energo/gems/actionpack-4.2.11/lib/action_controller/test_case.rb:745:in `build_request_uri'
 # /Users/admin/.rvm/gems/ruby-2.4.4@energo/gems/actionpack-4.2.11/lib/action_controller/test_case.rb:634:in `process'
 # ./spec/spec_helper.rb:41:in `process_with_default_locale'
 # /Users/admin/.rvm/gems/ruby-2.4.4@energo/gems/actionpack-4.2.11/lib/action_controller/test_case.rb:67:in `process'
 # /Users/admin/.rvm/gems/ruby-2.4.4@energo/gems/actionpack-4.2.11/lib/action_controller/test_case.rb:520:in `post'
 # /Users/admin/.rvm/gems/ruby-2.4.4@energo/gems/actionpack-4.2.11/lib/action_controller/test_case.rb:550:in `xml_http_request'
 # ./spec/controllers/api/meta/customers/data_series_import_configurations_controller_spec.rb:40:in `block (3 levels) in <module:Customers>'
  

Проблема в /Users/admin/.rvm/gems/ruby-2.4.4@energo/gems/actionpack-4.2.11/lib/action_dispatch/routing/route_set.rb:802 , потому что есть

 if options.key? :params
   params.merge! options[:params]
end
  

И options[:params] == ‘some,key’, который является строкой. Когда я удаляю params из запроса, он проходит. То же самое, когда я меняю params значение на Hash .

Но мне действительно нужно передать строку с params ключом. Есть идеи, как это сделать?

Комментарии:

1. как передать параметры в виде хэша?

Ответ №1:

Попробуйте стиль rails-5:

 xhr :post, :create, params: { locale: :en, ... params: 'some,key' }
  

Комментарии:

1. Спасибо, работает! но locale и customer_id должно быть вне params блока.

Ответ №2:

Вторым вариантом было использовать params ключ типа String , а не Symbol