Rails 3 から 3.1.8 (およびそれ以降) にアップグレードしています。私のテストのいくつかが失敗しています。そのうちの 1 つは、一見したところ、mysql2 gem からの変更 (0.2.x から 0.3.x) が原因のように見えました。ただし、少し奇妙になります。これが何が起こっているかです。
私のテストでは、モデルの属性を更新し、それらが保存されていることを確認しています:
... post :create, :advertisement => @advertisement_attributes assert_equal assigns(:blah).start_date, @blah_attributes[:start_date]
時代が違うと言うのは失敗です。binding.pry を入れて assert_equal の直前にジャンプすると、次のようになります。
a = assigns(:blah).start_date
b = @blah_attributes[:start_date]
a == b #false
a.to_s #"2012-10-17 20:46:12 UTC"
b.to_s #"2012-10-17 20:46:12 UTC"
a.to_i #1350506772
b.to_i #1350506772
a.to_i - b.to_i #0
これまでのところ.. == が false を返す理由についてはまだ混乱しています。しかし、本当に奇妙なのは、日付を差し引いた場合です -
a - b #-0.989403009414673
誰かがここで何が起こっているのか説明できるなら、私は知りたいです!
また、この同じテストは Rails 3 (アプリケーションにタイムゾーンが設定されていません) で問題なくパスしていました。何が変更されたかへのポインターも便利です!