Length validation
接下來是驗證欄位的字串長度。name 最多 50 個字,也就是不能超過 51,而 email 可能會超過字串最大限制 255 個字,所以也要加入驗證。
test/models/user_test.rb
.
.
.
test "name should not be too long" do
@user.name = "a" * 51
assert_not @user.valid?
end
test "email should not be too long" do
@user.email = "a" * 244 + "@example.com"
assert_not @user.valid?
end
方便測試起見,使用字串連乘(string multiplication),製造出 @user.name 有 51 個字,可以用 Rails console 測試效果:
> "a" * 51
=> "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
> ("a" * 51).length
=> 51
@user.email 也是相同道理:
> "a" * 244 + "@example.com"
=> "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
[email protected]"
> ("a" * 244 + "@example.com").length
=> 256
執行測試,會失敗,因為還沒加入字串長度驗證功能(Red):
$ bundle exec rake test
現在加入驗證功能:
app/models/user.rb
class User < ActiveRecord::Base
validates :name, presence: true, length: { maximum: 50 }
validates :email, presence: true, length: { maximum: 255 }
end
也就是在 validates 多加一個 length,還有限制最大上線的參數 maximum。
再度執行測試,就會成功(Green):
$ bundle exec rake test