2015-04-04 2 views
0

После обновления проекта 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. Любая помощь будет принята с благодарностью, так как это приводит к тому, что многие тесты терпят неудачу прямо сейчас.

ответ

1

Rspec 3 extracted mocks support в жемчужине rspec-activemodel-mocks, поэтому вам может потребоваться добавить rspec-activemodel-mocks в ваш Gemfile, чтобы помощники маршрутов вели себя как и ожидалось в ваших спецификациях.

+0

Спасибо. У меня уже этот драгоценный камень (иначе никаких маршрутов не будет работать вообще). Ошибка все еще возникает ... :( – Jens

+1

Вы пытались добавить ': to_param' в свой' mock_model' (например, 'mock_model (User, login: User.make_token, to_param: 7)')? Может быть, у рельсов возникли проблемы с созданием параметров из-за того, что ожидаемые методы экземпляра не были пропущены. – Hannah

+0

На самом деле это было наоборот. Некоторые из моих инициализационных последовательностей включали блок «to_param: 1», который был включен во все вызовы 'mock_model'. в правильном направлении, я удалил его. Теперь я снова получаю полезные тесты (и нужно выяснить, почему это было добавлено в первую очередь ...). – Jens

 Смежные вопросы

  • Нет связанных вопросов^_^