A validity test
這節要使用 TDD 驗證模型(model)。如果不先寫出失敗的測試,再想辦法讓它通過,我們很難檢驗到底有沒有實現我們要的驗證功能。
測試的方法是先建立一個有效的模型(model),然後把屬性值改成無效的值,讓這個物件變成無效的狀態。以防萬一,先寫一個有效的測試,確認物件一開始是有效的,當驗證失敗,才知道問題出在哪。
前面建立 User model 的時候,同時也產生了一個 test/models/user_test.rb 檔案,現在是空的:
require 'test_helper'
class UserTest < ActiveSupport::TestCase
# test "the truth" do
# assert true
# end
end
為了寫出一個有效的物件,我們要先初始一個 User model 的實例物件 @user,然後透過 setup 方法,讓測試執行之前都會先跑這段程式。因為 @user 是一個實例變數,所以可以自動地在測試中的任何地方使用,然後可以透過使用 valid? 方法驗證合法性:
require 'test_helper'
class UserTest < ActiveSupport::TestCase
def setup
@user = User.new(name: "Example User", email: "[email protected]")
end
test "should be valid" do
assert @user.valid?
end
end
assert @user.valid? 的意思就是如果有效,就回傳 true,反之 false。
因為目前都還沒建立驗證功能,所以這個測試一開始可以通過(Green):
$ bundle exec rake test:models
使用 rake test:models 表示只執行 model 的測試。