test "email should be present" do
@user.email = " "
assert_not @user.valid?
end
我沒有真正得到這個測試中,尤其是第2行我承擔assert_not @ user.valid?與assert [email protected]相同?但我猜他認爲前者更容易閱讀。爲什麼將user.name設置爲空字符串? (哈特爾軌道書)
test "email should be present" do
@user.email = " "
assert_not @user.valid?
end
我沒有真正得到這個測試中,尤其是第2行我承擔assert_not @ user.valid?與assert [email protected]相同?但我猜他認爲前者更容易閱讀。爲什麼將user.name設置爲空字符串? (哈特爾軌道書)
電子郵件是爲了使@user
的對象無效,因此使測試通過設定爲「空」的字符串。
我當然假設email
屬性是User
的必填字段。有了這個假設,即使電子郵件地址爲空,如果user
仍然有效,測試將會失敗。
我猜測,這個測試也有存在驗證(presence: true
)在用戶模式,爲用戶的電子郵件和name。這就是爲什麼@user.email = " "
設置爲空字符串;基於驗證存在條件,用戶現在是無效的。附註:這實際上是在調用空白方法。
是的,你說得對,assert_not @user.valid?
或assert [email protected]?
將返回相同的東西。這條線意味着如果對象爲假,即用戶無效,則assert_not @user.valid?
通過。
所以基本上,它說的是,「好了,因爲這傢伙有一個空白(無效)的電子郵件,我們正在測試,以確保他也應該是無效的用戶」。所以測試的目的是確保任何有空白郵件的用戶都不是有效的用戶。
此測試的目的是確保User
模型的用戶對象無效,除非它具有email
屬性集。
要做到這一點,我們故意將的@user
實例變量的屬性設置爲" "
或空白,從而使@user
無效。 現在@user.valid?
返回false,因爲你在user.rb
文件中的以下行:
validates :email, presence: true
你絕對說得assert [email protected]?
相同assert_not @user.valid?
。您可以使用兩者來測試相同的行爲。
但即使沒有名字,你會得到相同的結果嗎?那麼測試的目的是什麼? –
我假定'@ user'對象是一個有效的對象,這意味着它的名字已經被賦值在'@ user'變量中,或者用戶的名字不是必填字段。你的4行代碼留下了很多假設。 –