我試圖運行下面的單元測試:Rails的單元測試將不會更新數據庫
def test_passwordchange
# check success
assert_equal @longbob, Usuario.autenticar("longbob", "longtest")
#change password
@longbob.password = "nonbobpasswd"
@longbob.password_confirmation = "nonbobpasswd"
assert @longbob.save!
#new password works
assert_equal @longbob, Usuario.autenticar("longbob", "nonbobpasswd")
#old pasword doesn't work anymore
assert_nil Usuario.autenticar("longbob", "longtest")
#change back again
@longbob.password = "longtest"
@longbob.password_confirmation = "longtest"
assert @longbob.save!
assert_equal @longbob, Usuario.autenticar("longbob", "longtest")
assert_nil Usuario.autenticar("longbob", "nonbobpasswd")
end
然而,它拋出的錯誤在包含「assert_equal」,說1號線:
<#<Usuario ID: 1000003, login: "longbob", hashed_password: "078cf6ae2de80ed6c004c8c8576a5572e077a52c", salt: "1000", nombre: nil, apellido: nil, email: "[email protected]", telefono: nil, tipo_usuario: nil, foto: nil, bol_activo: nil>> expected but was <nil>.
這裏是我的身份驗證方法:
def self.authenticate (login, pass)
u=find(:first, :conditions=>["login = ?", login])
return nil if u.nil?
return u if Usuario.encrypt(pass, u.salt)==u.hashed_password
nil
end
而且,我定義如下:
def password=(pass)
@password=pass
self.salt = Usuario.random_string(10) if !self.salt?
self.hashed_password = Usuario.encrypt(@password, self.salt)
end
所以,我想應該更新hashed_password每次我重新分配的東西到「密碼」......對吧?
最新情況?
Thx。
UPDATE:我注意到,如果我改變:
assert_equal @longbob, Usuario.autenticar("longbob", "nonbobpasswd")
到
assert_equal @longbob2, Usuario.autenticar("longbob", "nonbobpasswd")
它通過該測試,但是它下面的行失敗... Trowing相同錯誤...這是怎麼回事?
用戶是'Usuario'輸入錯誤還是真的使用2個不同的類?如果是這樣,你能否提供2種方法'驗證'的源代碼。 – 2011-06-13 16:43:16
是一個類型...已經修復 – tiiin4 2011-06-13 16:46:21
您是否檢查「@ longbob.save」是否更新記錄?您可以在保存之後添加一個像'assert_nil Usuario.authenticate(「longbob」,「longtest」)''的測試。 – 2011-06-13 17:00:55