それを解決するのに調べました。
環境
ruby2.3.1
rails4.1.6からrails5.0.3
rspecはこんな感じ
test_time = Time.now user.test_at = test_time user.save! ごにょごにょ処理 test_atが変わらないよねっていうテスト expect(user.test_at).to eq(test_time)
4.1.6では通っていたけど5.0.3で落ちたテスト結果
expected: 2017-05-16 16:26:54.647989000 +0900 got: 2017-05-16 16:26:54.000000000 +0900
test_timeはTimeクラス、user.test_atはActiveSupport::TimeWithZone。
rails4.1.6のときはsave!のタイミングではTimeWithZoneのミリ秒はまるめられてなかったみたい。
4.1.6でもexpectの前にreloadすると、ミリ秒はまるめられたものに変わった。
rails5ではsave!のタイミングでミリ秒をまるめたものを保持するように変わったげ。