「current_user」などの application_controller メソッドにアクセスする RSpec

StackOverflow https://stackoverflow.com/questions/3720953

質問

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

使用する 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>
役に立ちましたか?

解決

rspec-railsはあなたにaを与えます controller コントローラーの例で使用する方法。それで:

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

働くべきです。

他のヒント

どうすればどこにあるかを知ることができます current_user?これはそれを解決する必要があります:

subject.current_user.should_receive(:foos).and_return(foos)

私はrestful_authenticationに完全に精通しているわけではありません。 current_user コントローラーの方法であり、オブジェクトではありません。そのため、呼び出します should_receive その上では、期待どおりに機能していません(オブジェクトに期待を設定しています current_user 戻り値, 、しかし、この方法はあなたの期待の範囲内でアクセスできません)。

これを試して:

stub!(:current_user).and_return(foos)

これを読んで少しアレンジしてみました。単にユーザー オブジェクトを Rspec テストに渡したい場合は、これを使用できます。

  1. まず、rspec テスト内でユーザー オブジェクトを作成します。例えば:(必要な属性、またはユーザー オブジェクトの作成に必要な属性をすべて使用します。)

    ユーザー = User.create(名前:「テッド」)

    (注記:FactoryGirl のファクトリーを使用することもできます。)

  2. ここで、変数「user」に保存されたユーザー オブジェクトを使用して、同じ Rspec テスト内でこれを実行します。

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

それはうまくいくはずです...

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top