Exercises
為 email 轉小寫字母寫一個測試。這個測試使用 reload方法重新載入資料庫的資料,assert_equal 方法則是測試是否相等。為了測試下面的程式碼是否正確,先把 before_save 註解起來,看看測試是否失敗,然後再去掉註解,看測試能否通過:
test "email addresses should be saved as lower-case" do
mixed_case_email = "[email protected]"
@user.email = mixed_case_email
@user.save
assert_equal mixed_case_email.downcase, @user.reload.email
end
在 before_save callback 中,使用 email.downcase! 直接修改 email 的屬性值,執行測試,看看能不能這樣做:
before_save { email.downcase! }
之前為 email 格式設定的正規表示式有個缺點,就是它會讓 [email protected] 這樣的 email 通過格式驗證。現在把 [email protected] 無效的位址加進測試裡,讓測試失敗:
test "email validation should reject invalid addresses" do
invalid_addresses = %w[user@example,com user_at_foo.org user.name@example.
foo@bar_baz.com foo@bar+baz.com]
invalid_addresses.each do |invalid_address|
@user.email = invalid_address
assert_not @user.valid?, "#{invalid_address.inspect} should be invalid"
end
然後再寫一個更嚴謹的正規表示式,讓測試通過:
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-]+(\.[a-z\d\-]+)*\.[a-z]+\z/i