「current_user」などの application_controller メソッドにアクセスする RSpec
-
03-10-2019 - |
質問
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 テストに渡したい場合は、これを使用できます。
まず、rspec テスト内でユーザー オブジェクトを作成します。例えば:(必要な属性、またはユーザー オブジェクトの作成に必要な属性をすべて使用します。)
ユーザー = User.create(名前:「テッド」)
(注記:FactoryGirl のファクトリーを使用することもできます。)
ここで、変数「user」に保存されたユーザー オブジェクトを使用して、同じ Rspec テスト内でこれを実行します。
controller.stub!(:current_user).and_return(user)
それはうまくいくはずです...