[Rails3]ActionMailerで日本語メールを送る

最近は時間を見つけてはRailsによるアジャイルWebアプリケーション開発 第4版を写経しておる。
これ翻訳書なせいかアプリがちゃんと動いてもテストがなかなか通らないのね。Rails初心者だからどうしていいかわかんない。イテレーション一つ進めるのにものすごく時間がかかって疲れる。

今日はイテレーションH1の確認メールの送信をやっていたのだけどテストが通らないのね。
メール本文が文字化けしているからassert_matchが通らない。
そりゃそうだ。
Railsの文字エンコードはデフォルトでUTF-8だから日本語の文字化けで困ることはほとんどないんだけど、日本語メールはUTF-8じゃなくてISO-2022-JPに指定しなくちゃね。

解決策はGemでmail-iso-2022-jpを取ってきて、


[ruby]
# ~/work/depot/Gemfile

#…
gem ‘mail-iso-2022-jp’
[/ruby]
[bash]
:~/work/depot terachan$ bundle install
[/bash]

order_notifier.rbを以下のように変更

[ruby]
class OrderNotifier < ActionMailer::Base
#default from: ‘Sam Ruby <depot@example.com>’
default from: ‘Sam Ruby <depot@example.com>’, :charset => ‘ISO-2022-JP’

#…

end
[/ruby]

そしてDepotを再起動してrake test

[bash]
:~/work/depot terachan$ rake test:functionals
Run options:

# Running tests:

…………………………….

Finished tests in 1.050014s, 32.3805 tests/s, 59.0468 assertions/s.

34 tests, 62 assertions, 0 failures, 0 errors, 0 skips
[/bash]

文字化けが解消されてassert_matchがきちんとマッチして通りました。
いやー苦労したー。

読み進めるたびにこんな感じでまいっちゃうねホント。


追記 2012-6-13 01:25:19
イテレーションH2のIntegrationTestはpay_typeを”現金”に書き換えないとassert通りません。ホントこの手の翻訳忘れはいいかげんにしてほしい。ぶっちゃけソースコードは原著のままでもいい。

LINEで送る
Pocket

コメントを残す

*