После обновления проекта Rspec 3, я получаю следующие странные ошибки в моих тестах, которые я не в состоянии исправить:Странных ошибок в тестах после обновления rspec3
undefined method `empty?' for 2:Fixnum
# /opt/local/lib/ruby2.1/gems/2.1.0/gems/actionpack-4.2.1/lib/action_dispatch/routing/route_set.rb:251:in `block in missing_keys'
# /opt/local/lib/ruby2.1/gems/2.1.0/gems/actionpack-4.2.1/lib/action_dispatch/routing/route_set.rb:251:in `select'
# /opt/local/lib/ruby2.1/gems/2.1.0/gems/actionpack-4.2.1/lib/action_dispatch/routing/route_set.rb:251:in `missing_keys'
# /opt/local/lib/ruby2.1/gems/2.1.0/gems/actionpack-4.2.1/lib/action_dispatch/routing/route_set.rb:231:in `optimized_helper'
# /opt/local/lib/ruby2.1/gems/2.1.0/gems/actionpack-4.2.1/lib/action_dispatch/routing/route_set.rb:220:in `call'
# /opt/local/lib/ruby2.1/gems/2.1.0/gems/actionpack-4.2.1/lib/action_dispatch/routing/route_set.rb:345:in `block (2 levels) in define_url_helper'
# ./app/controllers/users_controller.rb:10:in `block in <class:UsersController>'
users_controller
линии 10 содержит редирект:
redirect_to(user_path(current_user))
в каждом из этих случаев, current_user
является издевались объект, созданный пользователем с помощью mock_model(User, login: User.make_token)
и имеет значение идентификатора цитируемый в сообщении об ошибке (до «: Fixnum»).
Это происходит с каждым перенаправлением, которое содержит объект . Примеры:
redirect_to current_user
redirect_to user_path(current_user)
redirect_to url_for([:admin, current_user, :edit])
Если я использую идентификатор объекта, как в redirect_to user_path(current_user.id))
, ошибка не происходит. Однако тогда, например, url_for
также ломается, так как я не могу использовать url_for([@parent.id, @object.id, :edit])
(объекты не могут быть получены только из их идентификаторов, но необходимы для этого пути).
Это происходит только при использовании издевающихся объектов с RSpec 3 и Rails 4.2.1. Любая помощь будет принята с благодарностью, так как это приводит к тому, что многие тесты терпят неудачу прямо сейчас.
Спасибо. У меня уже этот драгоценный камень (иначе никаких маршрутов не будет работать вообще). Ошибка все еще возникает ... :( – Jens
Вы пытались добавить ': to_param' в свой' mock_model' (например, 'mock_model (User, login: User.make_token, to_param: 7)')? Может быть, у рельсов возникли проблемы с созданием параметров из-за того, что ожидаемые методы экземпляра не были пропущены. – Hannah
На самом деле это было наоборот. Некоторые из моих инициализационных последовательностей включали блок «to_param: 1», который был включен во все вызовы 'mock_model'. в правильном направлении, я удалил его. Теперь я снова получаю полезные тесты (и нужно выяснить, почему это было добавлено в первую очередь ...). – Jens