Почему экземпляр пользователя devise не заглушается? - PullRequest
2 голосов
/ 06 мая 2011

У меня есть экземпляр @user, который я использую для входа в систему пользователя devise. Это макрос, как предлагает Devise Wiki:

module ControllerMacros
  def login_user
    before(:each) do
      @request.env["devise.mapping"] = :user
      @user = Factory(:user)
      sign_in @user
    end
  end
end

Обычно я делаю разные вещи для методов-заглушек, но я не понимаю, почему эта заглушка не работает: (обратите внимание, что @user действительно вошел в систему, я успешно использую его для тестирования атрибутов и прочего)

@user.stub(:has_tavern_quest?).and_return(true)

Кажется, что заглушка работает (я проверил с @ user.has_tavern_quest должно true), но я просто вернусь:

 Failure/Error: flash[:error].should == I18n.t('error.has_quest')
   expected: "You already have a quest to finish !"
        got: nil (using ==)

Весь метод контроллера:

quest_type = params[:quest_type]
@quest_minutes = TavernQuest.get_quest_minutes_from_quest_type(quest_type)

flash[:error] = I18n.t('error.invalid_post') and redirect_to tavern_url and return unless [1,2,3,4].include? quest_type.to_i
flash[:error] = I18n.t('error.has_quest') and redirect_to tavern_url and return if current_user.has_tavern_quest?
flash[:error] = I18n.t('error.no_adv_points') and redirect_to tavern_url and return if current_user.adventure_points < @quest_minutes       

current_user.reduce_adventure_points(@quest_minutes.to_i)
TavernQuest.create(:user_id => current_user.id, :start_time => Time.now, :end_time => Time.now + @quest_minutes.minutes, 
                             :duration => @quest_minutes, :quest_type => quest_type)

redirect_to tavern_url

конец

И вся спецификация:

    it "should redirect to '/tavern' with an error if user already has a tavern quest" do
        @user.stub(:has_tavern_quest?).and_return(true)
        post :create, :quest_type => 3
        flash[:error].should == I18n.t('error.has_quest')
        response.should redirect_to tavern_url
    end

Кто-нибудь знает, почему и как это заставить работать?

1 Ответ

3 голосов
/ 08 мая 2011

Решено:

  def login_user
    before(:each) do
      @user = Factory(:user)
      controller.stub(:current_user) { @user }
      sign_in @user
    end
  end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...