【问题标题】:How to test guest user in devise rails gem?如何在设计 rails gem 中测试来宾用户?
【发布时间】:2013-04-15 10:49:33
【问题描述】:

我想在我的应用程序中使用 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

我该怎么做?

【问题讨论】:

    标签: ruby-on-rails ruby rspec devise


    【解决方案1】:

    您不能使用访客用户 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-18
      • 1970-01-01
      相关资源
      最近更新 更多