はじめに
RspecにてJSON形式のレスポンスデータを検証している際に、
created_at
やupdated_at
にてデータが一致しないことで困っていた
困ってたこと
データ形式:
{
'key' => 'value',
'created_at' => 'instance.created_at',
'updated_at' => 'instance.updated_at',
}
Timeオブジェクトはミリ秒の値まで含んでしまっているため、
データが一致せずにテストが落ちてしまう
# 期待していたデータ
"created_at" => "2024-08-26T10:35:23+09:00"
# 実際に来たデータ
"created_at" => "2024-08-26T10:35:23.000+09:00"
as_jsonで試してみた
as_jsonではハッシュ形式に変換してくれるらしい
created_atやupdated_atで比較するには、as_jsonを使うと良い
# as_jsonを使用した場合
hogehoge.created_at.as_json
"2024-08-26T11:23:03.000+09:00"
hogehoge.created_at
Mon, 26 Aug 2024 11:23:03 JST +09:00
be_jsonにしたほうが良さそう
毎回、created_atやupdated_atに対して as_json
を使用するのはちと大変...
そんなこんなで、RSpec3にはコンポーザブルマッチャとなるものがあるみたい
expect(response.body).to be_json include(...)
どこかのタイミングで上記の書き方でJSONを比較するようにしたい