2016-04-16 4 views
0

Ich verwende derzeit RSpec, um meine Rails 4-Anwendung zu testen, und beim Testen fand ich dieses seltsame Problem: subject.current_user ist Null in der zweiten Methode in einem Kontext. Codeausschnitt:RSpec mit Devise: subject.current_user ist Null, wenn in der zweiten Methode in einem Kontext verwendet

describe 'GET #register_as_team:' do 
    context 'user logged in but not admin:' do 
     login_user 
     it 'should redirect_to user_path if user is not student' do 
     get :register_as_team, id: subject.current_user.id 
     expect(response).to redirect_to(user_path(subject.current_user)) 
     expect(flash[:danger]).not_to be_nil 
     end 

     it 'should redirect_to student_path if user is a non-pending student' do 
     student = FactoryGirl.create(:student, user: subject.current_user, is_pending: false) 
     get :register_as_team, id: subject.current_user.id 
     expect(response).to redirect_to(student_path(student)) 
     end 
    end 
    end 

Also, wenn subject.current_user erstes Mal verwendet wird, ist es in Ordnung, und ich kann nur den angemeldeten Benutzer erhalte aber in der zweiten Methode gibt es gleich Null.

Hintergrundinformationen login_user ist wie folgt:

module ControllerMacros 
    def login_user(user = nil) 
    before(:each) do 
     # @request.env["devise.mapping"] = Devise.mappings[:user] 
     user ||= User.find_by(email: '[email protected]') 
     user ||= FactoryGirl.create(:user, email: '[email protected]', uid: 'default_user.controller.spec') 
     sign_in user 
    end 
    end 
end 

Antwort

0

In einem Beispiel subject nur resolved once sein kann.
Wenn Sie getan haben, get :register_as_team, id: subject.current_user.id, Sie im Wesentlichen gelöst subject bereits und subject.current_user ist nicht in der nächsten Zeile gelöst.

Versuchen Sie folgendes:

describe 'GET #register_as_team:' do 
    context 'user logged in but not admin:' do 
     login_user 
     it 'should redirect_to user_path if user is not student' do 
     user = subject.current_user 
     get :register_as_team, id: user.id 
     expect(response).to redirect_to(user_path(user)) 
     expect(flash[:danger]).not_to be_nil 
     end 

    it 'should redirect_to student_path if user is a non-pending student' do 
    student = FactoryGirl.create(:student, user: subject.current_user, is_pending: false) 
    user = subject.current_user 
    get :register_as_team, id: user.id 
    expect(response).to redirect_to(student_path(student)) 
    end 
end 
Verwandte Themen