2015-05-11 5 views
0

Я пытаюсь изучить rspec и применить то, что я изучаю к существующему приложению rails.RSpec: Проблемы с преобразованием в новый синтаксис «allow» для mocks/stubs

Я пытаюсь создать макет пользователя, под названием «current_user»

я в основном взял эту строку кода

 controller.stub(:current_user).and_return(build_stubbed(:user)) 

и поставил его перед моими тестами (все из которых требуют CURRENT_USER будет определено)

Это работает. Но

  1. Я знаю, что этот синтаксис нежелателен, и я должен использовать

    allow().to receive().and_return() 
    

синтаксис, но я не могу показаться, чтобы преобразовать его в новый синтаксис и заставить его работать.

Я попытался

user = double("user") 
    allow(user).to receive(:current_user).and_return(build_stubbed(:user)) 

без успеха. В реальности я понятия не имею, что я делаю с этим, и нужно указывать в правильном направлении. Я много раз искал ответ, но я подозреваю, что это слишком основательно.

Поблагодарите за руководство.

ответ

2

В настоящее время вы обрушиваете метод current_user для своей переменной controller. В новом примере синтаксиса вы поместили заглушку на двойной объект user.

Не зная больше о build_stubbed, я ожидал бы выглядеть следующим образом:

allow(controller).to receive(:current_user).and_return build_stubbed(:user) 
+0

Это работает. Поэтому, чтобы уточнить, если это было написано на английском языке, его высказывание .... «разрешить контроллеру иметь метод под названием current_user и отвечать на вызов этого метода с помощью объекта пользователя»? – GhostRider

+0

Да, это очень хорошо. – Johnson