2

私はまだrspecを理解しようとしていますが、現在はauthlogicを使用してユーザーとセッションを処理しています。def current_userメソッドをapplciationコントローラーに追加したり、ヘルパーメソッドとして追加したりするなど、通常のauthlogicを実行しましたが、rspecコントローラーファイルでそれにアクセスするにはどうすればよいですか?

これが私のuser_sessions_controller_spec.rbです:

require 'spec_helper'
require 'authlogic'

describe UserSessionsController do

  context "user is already logged in" do

    before(:each) do
      include Authlogic::TestCase
      activate_authlogic
      UserSession.create Factory.build(:user)
    end

    it "should redirect the user to the home page" do
      get 'new'
      response.should redirect_to(home_path)
    end

  end

  describe "#create" do
    context "when the user is not logged in" do    
      before(:each) do
        current_user = nil
      end

      it "correct authorization should create a new session" do
        post 'create', {:login => "afactoryuser", :password => "apass", :password_confirmation => "apass"}
        current_user.should_not be_nil
      end
    end
  end

end

rspecを実行すると、次のように表示されます。

correct authorization should create a new session
undefined local variable or method `current_user' for #<RSpec::Core::ExampleGroup::Nested_1::Nested_2::Nested_1:0x000001017d3410>

だから私はそれがrspecコンテキストにあると推測しています...しかし、どうすればそれがuser-sessions_controllerにあるべきかを知ることができますか?そして、私もそれを正しくテストしていますか?

4

1 に答える 1

3

RSpecにcurrent_userを挿入して、試してみてくださいcontroller.current_user

current_userメソッドをスタブ化する場合は、ブロック内で:controller.stub!(:current_user).and_return(whatever)を使用しbefore :each ますが、スタブ化すると常に取得さwhateverれます。

于 2011-01-19T17:54:14.940 に答える