Rails 4 で TimeWithZone#as_json がmsecを出してしまう問題

Rails3からRails4へのアップグレード業で、TimeWithZoneがmsecを持つようになったためにas_jsonでmsecが出力されてテストがたくさん落ちる事案が発生した。

今回はJSON APIのテストで時刻をすべて正規表現でチェックしていたのでほぼ全滅という有り様であった。

最初はモンキーパッチしてみてとりあえずテストが通ることを確認したんだけど、よく考えたらそれも変だよなーといろいろ見ていたらActiveSuppot::JSON::Encoding.time_precisionというのを見つけた。

config/initializers/json_encoding.rbみたいなところに

ActiveSuppot::JSON::Encoding.time_precision = 0

と書いて終わり。よかったよかった。