Как я могу проверить authlogic в rspec? - PullRequest
3 голосов
/ 29 марта 2012

Я не могу заставить мои тесты работать, и мне было интересно, есть ли у кого-нибудь указатели.Я тестирую свою страницу редактирования пользователя так, что вам необходимо войти в систему, чтобы иметь возможность просматривать и редактировать профиль пользователя.После аутентичной документации, вот соответствующие коды:

class ApplicationController < ActionController::Base
  helper_method :current_user_session, :current_user

  private

def current_user_session
  return @current_user_session if defined?(@current_user_session)
  @current_user_session = UserSession.find
end

def current_user
  return @current_user if defined?(@current_user)
  @current_user = current_user_session && current_user_session.user
end

def require_current_user
  unless current_user
    flash[:error] = 'You must be logged in'
    redirect_to sign_in_path
  end
end
end

class UsersController < ApplicationController
  before_filter :require_current_user, :only => [:edit, :update]
  ...
end

В моем users_controller_spec

describe "GET 'edit'" do

        before(:each) do
            @user = Factory(:user)
            UserSession.create(@user)
        end     

        it "should be successful" do
            # test for /users/id/edit
            get :edit, :id => @user.id
            response.should be_success
        end

я протестировал его с помощью браузера, и он работает.Вы должны войти в систему, чтобы иметь возможность редактировать свой профиль, но он не работает в моем тесте rspec.

У меня такое ощущение, что это как-то связано с mock controller , но яне могу понять, как.Я также прочитал контрольный пример , но все еще не могу заставить его работать.

Пожалуйста, помогите и большое спасибо !!!

1 Ответ

2 голосов
/ 21 мая 2012

Вы можете добавить метод current_user в ApplicationController следующим образом:

fake_user = controller.stub(:current_user).and_return(@user) #you could use a let(:user) { FactoryGirl.create(:user) } instead of before_each
get :edit, :id => fake_user.id
response.should be_success
...