我想在我的应用程序中使用Devise,我需要访客用户。我尝试使用这个例子 - https://github.com/plataformatec/devise/wiki/How-To:-Create-a-guest-user
现在,我想为用户编写一些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 :(得分: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