2012-01-10 13 views
2

メソッド呼び出しのパラメータに渡されたパラメータが特定の制約を満たしているかどうかを確認できますか?私は何かをしたいと思いますRSpecのテストダブルへのメソッドコールのパラメータのチェック

my_double = double("MyObject") 
my_double.should_receive(:mocked_method).with{ <something that has an attribute called name and value "john"> } 

ありがとうございます。

編集:私は、私は私が欲しいもの

を達成するために何をしたいビットを明確にしようとするでしょうが、モックの特定の方法は、いくつかの条件

答えて

5

記録のために。私は何を達成したいことは

@test_double.should_receive(:send_mail) do |mail| 
    mail.to.should eq(["[email protected]"]) 
    mail.body.decoded.should include "Error" 
    end 

で作ることができ、コードがブロックで指定された条件を満たしパラメータで指定されたオブジェクトのメソッドsend_mailを呼び出す必要があります。ちょうどあなたのメソッドが複数の引数を受け入れた場合、あなたはブロックで次の操作を行うことができ、追加する

+0

パーフェクト、これはまさに私の 'send_emails'ユースケースにも求めていたものです! – Hengjie

0

Inを満たしオブジェクトを渡すと呼ばれていたことを確認することです私の見解では、それは実際に別個のテストでなければなりません:

context "after being passed to my_double" do 
    before { my_double(XXX) } 
    subject { XXX } 
    it { should respond_to :attribute } 
    describe :attribute do 
    subject { XXX.attribute } 
    it { should == 5 } 
    end 
end 
+0

私が正しく自分自身を説明しませんでした。 my_doubleはテストダブルであり、モックオブジェクトなので、テストするのは意味がありません。 –

1

allow_any_instance_of(MyClass).to receive(:my_method) do |*args| 
    expect(args[0]).to include "something" 
    expect(args[1]).to match(/something_else/) 
    # etc 
end 
関連する問題