2010-09-01 50 views
2

如何在rspec中編寫測試以確保密碼不會以純文本形式存儲在我的Ruby on Rails應用程序中?rspec聲明加密的密碼不是純文本

我真的不在意實現,因爲我不知道究竟是什麼插件或我將如何編寫密碼加密(有很多示例)。

我只想要一個獨立於實現的失敗測試。然後,當我執行我的代碼時,我可以確信我沒有純文本密碼。

我想我需要保存用戶(密碼),然後再次獲取用戶,並檢查密碼不等於純文本版本。

我是否在正確的軌道?

我有這些空測試:


describe "password encryption" do
it "should have an encrypted password attribute"
it "should set the encrypted password"
it "should encrypt the password"
end

回答

4

正如你所說,你描述的行爲是密碼是其純形式的不可恢復的,所以儘量寫描述了一個規範,而不是加密,這更多的是實現細節。

specify "a user's password should not be readable when they are loaded from the database" do 
    my_password = 'foobar22' 
    u = User.create :password => my_password, :password_confirmation => my_password 
    u.reload 
    u.password.should_not == my_password 
end 

這可以構造&措辭更好,但如果你只是存儲&將給予不及格規範讀出認證明文密碼。

我不認爲你會看到加密的工作方式,除非你自己實現它(這通常是不可取的)。

如果您選擇使用現成的系統(例如設計,許可等),您可能會發現編寫集成測試以檢查您將系統連接到項目中的方式是否正常工作更有用,而不是測試認證系統的細節(作者應該已經完成​​了,否則找到不同的認證系統!)。

+0

非常好!謝謝你的幫助。 – Rimian 2010-09-01 07:29:04

+0

設計看起來有趣! – Rimian 2010-09-01 10:32:21