2012-12-25 60 views
4

邁克爾·哈特爾的軌道教程6.20顯示了下面的代碼上市交易:Rails的教程Rspec的誤解

before do 
    @user = User.new(name: "Example User", email: "[email protected]") 
    end 
    . 
    . 
    . 
    describe "when email address is already taken" do 
    before do 
     user_with_same_email = @user.dup 
     user_with_same_email.email = @user.email.upcase 
     user_with_same_email.save 
    end 

    it { should_not be_valid } 
    end 

我無法把握這個概念,因爲@ user.dup返回完全相同的對象,這是一個代表複製到user_with_same電子郵件中,但@user從未保存到文件中任何位置的數據庫中。因此,user_with_same_email.save測試應該每次都有效。但是,測試通過。有人請解釋這一點...是否有一個隱含的數據庫保存在@user = User.new(...)?我知道如果它是User.create(...)會有一個保存,但不是新的方法。謝謝!

回答

4

您不會錯過隱式保存。

user_with_same_email不保存正確(我個人一直使用保存!可以肯定它不是默默不及格)

什麼規範被speccing是主體(即@user)不能被保存,因爲腦幹的與數據庫中的一行相同的電子郵件。

+0

感謝您清除那個......我沒有考慮它,但代碼是@ user.should_not be_valid。是否有文檔告訴我該規範試圖保存@ ..用戶,當我做一個should_not調用?我想閱讀,以更好地瞭解 –

+0

^我實際上是在做更多的閱讀,我看到有效的?方法,由be_valid中的塊使用,測試@user是否在模型文件中傳遞了rails的驗證。因爲我在那裏有唯一性驗證,所以模型將檢查數據庫的唯一性。 所以沒有@ .. user.save,我現在明白了,再次感謝! –

相關問題