6

我正在尝试使用 rspec 在我的 current_user 上删除一个方法(使用修改后的 restful_authentication auth 解决方案)。我完全不确定如何在我的控制器规范中访问此方法。current_user 本身不起作用。我需要先获取控制器本身吗?我该怎么做呢?

使用rails 2.3.5,rspec 1.3.0rspec-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

4 回答 4

2

rspec-rails gives you a controller method for use in controller examples. So:

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

ought to work.

于 2010-09-16T01:54:19.423 回答
1

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

subject.current_user.should_receive(:foos).and_return(foos)
于 2011-03-04T11:29:25.997 回答
0

我读了这个并稍微调整了我的。如果您只是想将用户对象传递到您的 Rspec 测试中,您可以使用以下命令:

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

    user = User.create(name: "ted")

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

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

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

那应该工作...

于 2013-01-01T18:01:04.703 回答
0

我对restful_authentication并不完全熟悉,只是Authlogic和Devise,但它可能是相似的,因为它current_user是一个控制器方法而不是一个对象,这就是为什么调用should_receive它不能按预期工作(你对current_user 返回的对象,但在您的期望范围内无法访问该方法)。

尝试这个:

stub!(:current_user).and_return(foos)

于 2010-09-15T21:41:55.417 回答