2012-01-13 34 views
0

我學習賴斯:http://ruby.railstutorial.org/chapters/sign-in-sign-out#fnref:9.14integration_sign_up在railstutorial第9章的練習不會從軌道教程書工作

我在鍛鍊的工作。這個任務是在spec幫助器中創建一個登錄方法,以便它可以在集成測試中使用。他已經給出了代碼:

def integration_sign_in(user) 
    visit signin_path 
    fill_in :email, :with => user.email 
    fill_in :password, :with => user.password 
    click_button 
    end 

所以,在我的layout_links_spec.rb集成測試中,我打算使用它。

before(:each) do 
     @user = Factory(:user) 
     visit signin_path 
     fill_in :email, :with => @user.email 
     fill_in :password, :with => @user.password 
     click_button 
     # integration_sign_in(Factory(:user)) 
    end 

我評論一切,並使用integration_sign_in(Factory(:user))。我得到的錯誤是

ActiveRecord::RecordInvalid: 
     Validation failed: Email has already been taken 

但是,如果我用這看起來很相似,integration_sign_in功能原來,測試通過。有人可以提供解釋嗎?

謝謝。

回答

1

聽起來像您的:用戶工廠每次創建用戶時都會返回相同的電子郵件地址。因爲你有以前的(:每個)它將會製作並填充到數據庫中的多個用戶,並且它們都將具有相同的電子郵件。

如果您發佈您的工廠,我們可以調整它以使用序列或找到替代解決方案。

+0

啊。完美的解釋我的factories.rb是這樣的:Factory.define:user do | user | user.name 「邁克爾·哈特爾」 user.email 「[email protected]」 user.password的 「foobar的」 user.password_confirmation 「foobar的」 結束 – okysabeni 2012-01-13 18:00:38

+0

您更改user.email 「[email protected]」 到f 。序列(:email){| n | 「foo#{n}@example.com」} – Webjedi 2012-01-13 18:07:02

+0

謝謝Webjedi! – okysabeni 2012-01-13 18:18:54

相關問題