RailsのactionMailerでdeliver_laterする際、ブラウザから操作した場合は問題ないのにsystem test時に下記のエラーが発生。
ActiveJob::SerializationError: Unsupported argument type: Time
rspecかcapybaraかと思ったら、activeJobのバグと、ActionMailerに渡しているmockの書き方が原因だった。
myMailer.myMethod(params).deliver_later
paramsはAPIで取得するJSONをparseしたハッシュのため、テストの場合はmockにしていたが、TimeWithZone型をそのまま突っ込んでいた。
これをstringにすることで解決。
参考
- Mail and deliver_later doesn't work with date argument · Issue #18519 · rails/rails
- ActiveJobの引数にはなんでも突っ込んでいいわけではない - Qiita