ActionMailerで送るメールにURLを付加したいとき
- ActionMailerではurl_forが使える
- ただし、:only_path => falseにしたかったら以下どちらかを選ぶ必要がある
- url_forに:hostをつける or default_url_options[:host]を設定する
- こっちだと固定の値を持ってしまうのでちょっと・・・
- コントローラーを受け取って、コントローラーのurl_forを使う
- 今回は、application.rbのbefore_filterで Thread.current[:controller]に詰め込んで、mailerのビューで取得
- url_forに:hostをつける or default_url_options[:host]を設定する
- ただし、:only_path => falseにしたかったら以下どちらかを選ぶ必要がある
- RSpecでurl_forメソッドがちゃんと呼ばれたかどうかのチェック
- should_receiveに対して、withをつける。withの意味は、その引数が来た状態でメソッドが呼ばれたかどうか
@obj = Object.new
==Thread.stub!(:current).and_return({ :controller => @obj})==
@obj.should_receive(:url_for).with(:controller => :apply, :action => :profile, :id => @project.id, :only_path => false)
※↑の解説
Thread.currentを呼ぶと、@objが返される
@objのurl_forメソッドが、with以下の引き数で呼ばれるたことを確認する
-
- -
追記。
Thread.stub!は危険!
テスト実施中にテストケースごとのデータのクリアが動かなくなる事件が発生
なので、Mailerのクラスにurl_forを呼ぶためのメソッドを追加し、
それをスタブするように変えた