0

我在控制器中有以下代码:

# guest to user sign up view. Method that prepares a guest to become a user by emptying it's generic
#e-mail address.
def guest_signup
  if !current_user.guest
    redirect_to root_url
  end
  @user = current_user
  @user.email = ""
end

此控制器只是确保结果(表单)在用户以访客身份使用应用程序时分配的输入字段中没有通用电子邮件地址。

我正在尝试为它编写一个 rspec 测试,但我不知道如何正确地做到这一点……我知道这听起来像是开发驱动的测试,而不是相反,但我需要一个想法。目前我有这个不起作用:

require 'spec_helper'

describe UsersController do
  describe "Guest Signup" do
    it "should prepare guest with random e-mail user for signup form, emptying the e-mail" do
      current_user = User.create(:email => "guest_#{Time.now.to_i}#{rand(99)}@example.com", :password => "#{Time.now.to_i}#{rand(99999999)}", :guest => true)
      get :guest_signup, :user => @user.id
      expect(@user.email).to eq ('')
    end
  end
end
4

2 回答 2

0

这里怎么@user分配?大概guest_signup是在调用该方法之后。由于@user在对 的调用中被引用,因此guest_signup您在这里遇到了操作顺序问题。

也许你应该打电话:

get :guest_signup, :user => current_user.id
于 2013-05-17T00:36:40.670 回答
0
describe UsersController do
  describe 'Guest Signup' do

    let(:user) { mock.as_null_object }
    before(:each) { controller.stub(:current_user) { user } }

    context 'when guest does not exist' do

      before(:each) { user.stub(:guest) { false } }

      it 'redirects to root path' do
        get :guest_signup
        response.should redirect_to root_path
      end
    end

    context 'when guest exists' do

      before(:each) { user.stub(:guest) { true } }

      it 'should prepare guest with random e-mail user for signup form, emptying the e-mail' do
        get :guest_signup
        assigns(@user).should == user
        assigns(@email).should be_empty
      end
    end
  end
end
于 2013-05-17T00:38:07.177 回答