ruby-on-rails - 为什么设计用户实例没有被 stub ?

标签 ruby-on-rails

我有一个 @user 实例,用于记录设备用户。这是 Devise wiki 提出的宏:

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

通常,我对 stub 方法做了不同的事情,但我不明白为什么这个 stub 不起作用:(请注意,@user确实已登录,我成功地使用它来测试属性和内容)

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

看来 stub 有效(我检查了@user.has_tavern_quest应该是真的),但我刚刚回来:

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

整个 Controller 方法是:

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

有人知道为什么以及让它发挥作用的方法是什么吗?

最佳答案

已解决:

  def login_user
    before(:each) do
      @user = Factory(:user)
      controller.stub(:current_user) { @user }
      sign_in @user
    end
  end

关于ruby-on-rails - 为什么设计用户实例没有被 stub ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5905486/

相关文章:

ruby-on-rails - Ruby on Rails - 测试数据库

ruby-on-rails - 设计:将操作限制为管理员

ruby-on-rails - 如何在 Rails 中为匿名用户保存临时数据

ruby-on-rails - 使用 RSPEC 渲染 RABL 模板时出现空响应

ruby-on-rails - FactoryGirl.create 和 create 之间的区别

ruby-on-rails - RSpec 和 Cucumber 有什么区别?

ruby-on-rails - 如何在 Rails 中创建图表?

ruby-on-rails - 使用 `assign_attributes` 立即保存 `has_many through:` 关联

ruby-on-rails - Nginx 和 Phusion Passenger 正在运行,但 passenger-status 显示 0 个进程正在运行

ruby-on-rails - Ruby 流量控制 : throw an exception, 返回 nil 还是让它失败?