2017-10-06 112 views
0

我想爲以下方法編寫測試用例。我是單元測試新手。請讓我知道爲以下方法編寫測試用例的正確方法。如何使用此方法的rspec編寫測試用例

def create_new_user 
    self.password_salt = BCrypt::Engine.generate_salt 
    self.password_hash = BCrypt::Engine.hash_secret(self.password, password_salt) 
    user = User.new(email: self.email, username:self.username, password_hash: password_hash, password_salt: password_salt) 
    if user.valid? 
     user.save ? {is_created: true, err:''} : {is_created: false, err:'Something went wrong,please try later...'} 
    else 
     {is_created: false, err: 'Please enter all mandetory fields..'} 
    end 
    end 
+0

究竟是什麼問題在這裏?你不熟悉rspec語法?單元測試一般? –

+0

@SergioTulentsev我是rspec新手。只有rspec纔有2-3天的時間。我正在尋找像「expect(user).to be saved」這樣的語法,如果它是一個有效的用戶。以及如何測試「BCrypt :: Engine.generate_salt」。我的意思是說如何測試BCrypt應該生成鹽然後散列 –

+0

爲什麼你認爲你需要測試BCrypt方法?這個lib經過了開發人員的嚴格測試。沒有必要重複努力。不過,您可能會檢查調用的方法是否正確。例如,期望(BCrypt :: Engine)。接收(:generate_salt)和call_original。 –

回答

2

這可能不是「答案」本身,而是一些意見/建議可能會幫助你指明正確的方向:

  1. 你的方法看起來即使它要返回一個散列創建一個新用戶。您應該可能會返回新用戶。如果有錯誤,activerecord對象將會出現這些錯誤,不需要添加自己的錯誤。

  2. 記住要測試行爲。這對於第1點的變化至關重要。此方法的行爲是:它返回用戶記錄,無論是否保存,這就是行爲。測試一下。

  3. 您可能不需要調用user.valid ?.只需調用user.save

  4. 您可能只需返回user.save本身,因爲如果它工作,您將獲得持久/保存的用戶。如果沒有,你可以檢查user.errors

+0

@ashish gupta如果這有幫助,你能把這個標記爲答案嗎? – apanzerj

相關問題