代码之家  ›  专栏  ›  技术社区  ›  brad

RSpec访问应用程序\控制器方法,如“当前\用户”

  •  6
  • brad  · 技术社区  · 14 年前

    使用 rails 2.3.5 , rspec 1.3.0 rspec-rails 1.3.2

    # my_controller_spec.rb
    require 'spec_helper'
    
    describe MyController do
    
      let(:foos){ # some array of foos }
    
      it "fetches foos of current user" do
        current_user.should_receive(:foos).and_return(foos)
        get :show
      end
    end
    

    NoMethodError in 'ChallengesController fetches foos of current user'
    undefined method `current_user' for #<Spec::Rails::Example::ControllerExampleGroup::Subclass_1::Subclass_1::Subclass_2::Subclass_2:0x7194b2f4>
    
    4 回复  |  直到 14 年前
        1
  •  2
  •   zetetic    14 年前

    rspec rails为您提供 controller

    controller.stub!(:current_user).with(:foos).and_return(foos)

    应该有用。

        2
  •  1
  •   oma    14 年前

    它怎么知道在哪里能找到 current_user ? 这应该可以解决:

    subject.current_user.should_receive(:foos).and_return(foos)
    
        3
  •  0
  •   Robert Speicher    14 年前

    我不完全熟悉restful\u身份验证,只熟悉Authlogic和design,但可能在这方面很相似 current_user should_receive 它没有按预期工作(您正在对 当前用户 退货 ,但在您期望的范围内无法访问该方法)。

    试试这个:

    stub!(:current_user).and_return(foos)

        4
  •  0
  •   nfriend21    12 年前

    我读了这篇文章,对我的做了一些调整。如果只想将用户对象传入Rspec测试,可以使用以下方法:

    1. 首先,在rspec测试中创建一个用户对象。例如: (使用创建用户对象所需的任何属性。)

      用户=用户.创建(姓名:“ted”)

      (注意:您也可以使用FactoryGirl的工厂。)

    2. 现在,使用保存到变量“user”中的user对象,在同一Rspec测试中执行以下操作:

      控制器.stub!(:当前用户)。和返回(用户)