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 的測試。