2013-04-15 55 views
2

我想在我的應用程序中使用Devise,我需要訪客用戶。我試圖用這個例子 - https://github.com/plataformatec/devise/wiki/How-To:-Create-a-guest-user如何在devise rails gem中測試guest用戶?

現在,我想爲用戶寫一些rspec測試來描述用戶成爲成員(這是應用程序控制器中的logging_in操作)時的行爲。

所以,我的測試,現在是這樣的:

post :create_guest_user 
guest_user = User.find(session[:guest_user_id]) 
sign_in(guest_user) 

guest_user_id = guest_user.id 

# Guest user create resume 
post = guest_user.posts.build(:title => 'test of guest user') 
post.save.should be_true 
guest_user.posts.count.should == 1 

# Guest user become a member 

我不`噸知道該怎麼辦「#Guest用戶成爲會員」部分,我想赤新用戶後創建註冊和所有職位將屬於他。在應用程序控制器我有

def logging_in  
guest_user.posts.each do |post| 
    post.user = current_user 
    post.save 
end 
end 

我怎麼能做到這一點?

回答

0

您不能與來賓用戶sign_in。其實我現在不是爲什麼,也許是因爲它無效。反正登錄的客人,您需要把它添加到ControllerMacros

module ControllerMacros 
    # ... 
    def login_guest(guest = false) 
    guest ||= FactoryGirl.create(:guest_user) 
    @request.env['warden'] = @warden 
    @request.session[:guest_user_id] = guest.id 
    end 
end 

而且工廠:

FactoryGirl.define do 
    factory :user do 
    ... 
    end 

    factory :guest_user, class: 'User' do 
    sequence(:email) { Faker::Internet.email } 
    role    :guest 
    to_create   { |instance| instance.save(validate: false) } 
    end 
end 

用法:

describe PagesController, type: :controller do 
    context '#index' do 
    before do 
     login_guest 
     get :index 
    end 

    it { expect(response).to have_http_status(:success) } 
    it { expect(response).to render_template('pages/index') } 
    end 
end 
相關問題