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 に答える