6

rspecを使用して(変更されたrestful_authentication認証ソリューションを使用して)current_userのメソッドをスタブ化しようとしています。コントローラの仕様でこのメソッドにアクセスする方法が完全にわかりません。current_user自体は機能しません。最初にコントローラー自体を入手する必要がありますか?どうすればよいですか?

を使用してrails 2.3.5rspec 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はcontroller、コントローラーの例で使用するためのメソッドを提供します。それで:

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

動作するはずです。

于 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

私はrestful_authenticationに完全に精通しているわけではなく、AuthlogicとDeviseだけですがcurrent_user、オブジェクトではなくコントローラーメソッドであるという点でおそらく似ています。そのため、それを呼び出すshould_receiveと期待どおりに機能しません(をcurrent_user 返すオブジェクトですが、期待の範囲内でメソッドにアクセスできません)。

これを試して:

stub!(:current_user).and_return(foos)

于 2010-09-15T21:41:55.417 に答える
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 に答える