#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