rspec3でJST日付を検証する
modelのdatetime型項目を検証する。
例えば下記のmodelを考える。
class CreateTasks < ActiveRecord::Migration def change create_table :tasks do |t| t.string :title t.datetime :deadline t.timestamps null: false end end end
'2015/01/01'でdeadlineを初期化後に
p task.deadline
すると
Thu, 01 Jan 2015 00:00:00 JST +09:00
と表示される。
この状態で
expect(task.deadline).to eq DateTime.new(2015,1,1)
とすると
Failure/Error: expect(task.deadline).to eq DateTime.new(2015,1,1) expected: Thu, 01 Jan 2015 00:00:00.000000000 +0000 got: 2015-01-01 00:00:00.000000000 +0900
と言われてしまう。
DateTimeではタイムゾーンが反映されないのが原因?の模様。
Timeを使うとタイムゾーンが反映され、比較OKとなる。
expect(task.deadline).to eq Time.new(2015,1,1)
DateTimeとTimeの扱いは下記ページが詳しい。
RubyとRailsにおけるTime, Date, DateTime, TimeWithZoneの違い - Qiita