2011-09-13 6 views
2

これを書くにはどうすればハードコードなしで渡すことができます1。鶏と卵。RSpecはテスト対象のIDを含むshould_receiveマクロ

@sender = Factory(:user) 
@receiver = Factory(:user) 

mailer = double 
mailer.should_receive(:deliver) 
Mailer.should_receive(:email).with(1, @sender.id, @receiver.id).and_return(mailer) 

# This will create an object with id #1 to make this test pass 
@object = Object.create(:sender => @sender, :receiver => @receiver) 
+0

私はrspecが 'should_receive'の期待される引数を検証するためにshould-matchersを使用すると思います。そうでなければanything()のようなものは動作しませんでしたか?私の考えは、データベースの最初のIDに一致する独自の引数マッチャーを記述することです。 –

+1

これはここでも要約の問題ですが、私はそれを私の特定の問題で解決しました。私は 'test.rb'で配信をオンにし、' ActionMailer :: Base.deliveries'を使ってメールをテストしています。 – maletor

答えて

4

これはいかがですか?

Mailer.should_receive(:email).with(an_instance_of(Fixnum), @sender.id, @receiver.id).and_return(mailer) 
関連する問題