2

我想在我的应用程序中使用设计,我需要来宾用户。我尝试使用这个例子 - 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

我怎么能这样做?

4

1 回答 1

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
于 2017-04-24T10:40:24.177 回答