2011-01-12 4 views
3

私はここで完全に何かを明らかに不足している可能性がありますが、なぜ私はこれを行う必要があります:なぜあなたは直接スタブできません!モックオブジェクト?

setup do 
    @person = mock("person") 
    @person.stub!(:name).and_return("david") 
end 

の代わりに(「文字列」)モックは何

@person = mock("person").stub!(:name).and_return("david") 

ことが許可されていません返します@人がスタブされるのを許しているのに対してスタブされていますか? and_return呼び出しはスタブオブジェクトを返さないので(おそらくちょうどmock'ed機能のいくつかの内部ハッシュテーブルを変更して、別のオブジェクトを返す?

答えて

3

オブジェクトを返すモックされていません。mockはない。

まず、モックオブジェクトを作成するには、実際のモックオブジェクトを作成して変数に代入する必要があります。mock("person").stub!...を呼び出すと、コールチェーンでモックオブジェクトが失われます。チェーンバージョンはand_return

+0

おかげ - ARELとjQueryに露出オーバーで混乱:) – David

+0

@David - 私は問題を参照してください:)助けになるのはうれしいです。 –

3

Peterが指摘しているように、@人が割り当てられていますmockオブジェクトではなくand_returnの値。これはProcであることが判明しました。

あなたはこれを行うことができます:あなたはモック定義でスタブ権利を宣言することができますので、このすべては不要ですが

@person = mock("person").tap {|obj| obj.stub!(:name).and_return("david") } 

を:

@person = mock("person", :name => "david") 
関連する問題