ラベル Rspec の投稿を表示しています。 すべての投稿を表示
ラベル Rspec の投稿を表示しています。 すべての投稿を表示

2014年12月20日土曜日

【RSpec】成功したテストでもit句に書いたラベルを結果に書き出す方法

 Rspecで書いたunitテストの内容を他の人(特にコードの読めない人)と共有する場合、
テスト内容の一覧表を別に作るのは手間すぎるので、
テストのラベル(name?)の一覧を渡すのが一番よさそう。
(もちろんそれで事足りるかはラベルをわかりやすく書いてないとだけど)

 失敗したテストのラベルは結果の標準出力にでてくるけど、
成功した場合に出す方法がわからなかったが下記でできた。
fオプションに dパラメータを渡す。oオプションは結果をファイルに保存するため。


$ bin/rspec -P "spec/models/card.rb" -f d -o /tmp/card_labels.txt

【サイコロの目が偶数のときだけカードがひけること】
【ジョーカーがでるとサイコロが2つになること】
【ハートのカードを引くともう一度カードがひけること】
【クラブのキングを引くと一回休みになること】
【コインが0になると、ゲームオーバーになること】


 見つけるまで結構時間がかかったけどヘルプをちゃんと読めってことだな。

2014年12月14日日曜日

【RubyOnRails】RspecでActionMailerでのメール送信のtestを書く

 会員登録や受注確定など特定の処理で提携のメールを送る という処理はよくある。Railsでメールを送る処理を書く場合、ActionMailerを継承したクラスにメールの内容を記載するが、そのtestの書き方。できないかと思ってたらできたのでよかった。

まず、config/environments/test.rb で下記のように追加する。


config.action_mailer.delivery_method = :test

# config.action_mailer.perform_deliveries = false


「config.action_mailer.delivery_method = :test」を設定すると、specの中でActionMailerインスタンスを Base::ActionMailer.deliveries.last で取得できる。testの下記方はこの Base::ActionMailer.deliveries.last の戻り値に対して、

mailer = Base::ActionMailer.deliveries.last
expect( mailer.subject ).to eq "本日は晴天なり"

のようにして書く。

添付ファイルがある場合のtest

添付ファイルがある場合、メールはマルチパートになるため添付なしとtestがちょっと変わる。


mailer = Base::ActionMailer.deliveries.last
expect( mailer.subject ).to eq "合格通知"
expect( mailer.from ).to eq "goukaku@test.com"

# 本文はマルチパートになるので下記のように書く
expect( mailer.parts[0].body ).to eq "サクラサク"

# 添付ファイルの件名チェック
expect( mailer.attachments[0].filename ).to eq "合格証明書.txt"



ちなみに、「config.action_mailer.perform_deliveries = false」をonにすると、メールが送信されなくなる。開発環境での誤送信などの防止にはいいがtestできなくなってしまうのでtest環境ではoffがよさげ。


# 余談だけどこのブログで使っている Syntax Hilighterはスマホで見るとうまく動かないらしい。スマホからご覧の場合jsのサンプルソースが見れないようなので(その他のソースもハイライトされてない)PCで見てくださいませ。(ん~どうしよう。)