2015-02-24 3 views
0

Я не могу заглушить свой @current_user, чтобы мой before_filter: login_required прошел, и я получаю правильный шаблон вместо перенаправления на экран входа.Stub curren_user для login_required rspec 3.1 rails

вот мой контроллер спецификации:

before(:each) do 
    allow(controller).to receive(:current_user).and_return FactoryGirl.build(:signed_up_user) 
    end 

    it "index action should render index template" do 
    get :index 
    expect(response).to render_template(:index) 
    end 

Я считаю, что это новый RSpec синтаксис для гася.

Есть несколько примеров использования метода controller.stub, но это, похоже, не работает. Я просто хочу заглушить переменную @current_user, чтобы она выглядела так, как будто пользователь зашел в систему, поэтому я могу вернуться к тестированию моего контроллера с фактической спецификацией контроллера. Прямо сейчас, я использую только спецификации функций.

Я работаю над этим в течение нескольких недель!

EDIT:

Я не использую изобрести. Я создал свою собственную аутентификацию после Ryan Bates nifty: аутентификация.

before_filter :login_required 


def login_required 
    unless current_user 
    redirect_to login_path 
    end 
end 

def current_user 
    @current_user ||= User.find(session[:user_id]) if session[:user_id] 
end 

Я просто пытаюсь установить переменную @current_user (я предполагаю, что я мог бы также установить сессии [: user_id], но не смог получить эту работу либо) для моих тестов контроллера. Это должно позволить before_filter пройти и позволить мне проверить мои методы контроллера. Я тестирую аутентификацию в спецификации спецификации.

ответ

0

Я предполагаю, что вы используете завещать, на wiki about rspec testing они объясняют, как добавить изобрести Rspec хелперы,

RSpec.configure do |config| 
    config.include Devise::TestHelpers, type: :controller 
end 

Когда вы сделаете это вы можете войти с помощью любого пользователя, созданного в базе данных

let(:user) { FactoryGirl.create(:signed_up_user) } 
before :each do 
    sign_in user 
end 

И все, у вас теперь есть вход в систему.

+0

Я не использую устройство. Я хотел создать собственную аутентификацию с нуля. Подобно отличному: аутентификация Райана Бейтса. – rubyrailzdevel

Смежные вопросы