我正在使用 Rails 6 中包含的標準工具進行測驗。這是一個非常簡單的測驗,但是 freeze_time 似乎不起作用,并且錯誤代碼很難找出原因。
這是我正在執行的測驗:

這是運行測驗后的錯誤:

uj5u.com熱心網友回復:
當您創建一個新Person的值時,created_at應該設定(假設它已timestamps應用),但由于您得到nil的是,幾乎可以肯定您的Person創建失敗。可能是由于嘗試保存時的驗證錯誤。您可以查看模型的錯誤條目以確定。
要顯示錯誤以供查看:
class PersonTest < ActiveSupport::TestCase
test 'created at matches current time' do
freeze_time
assert_equal(Time.current, Person.create!.created_at)
end
end
如果是驗證錯誤,您可以繞過這些:
class PersonTest < ActiveSupport::TestCase
test 'created at matches current time' do
freeze_time
person = Person.new.save(validate: false)
assert_equal(Time.current, person.created_at)
end
end
不過,這有兩點不對勁。
- 您希望在測驗期間盡可能避免保存到資料庫以保持它們的性能。
- 您實際上是在這里測驗 Rails 的內置功能。這是您不應該執行的測驗。可能有更好的測驗來檢查 Rails
timestamps是否已應用于您的Person模型,但這不是我以前寫過的(我為所有內容撰寫測驗)。沒有辦法timestamps在提交中指手畫腳,所以測驗它們的存在感覺有點矯枉過正。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/507447.html
標籤:轨道上的红宝石
上一篇:Rails陣列轉移到新的連接表
