1

Rspecを使用してクラス配列変数へのプッシュをどのようにモックしますか?単純化しすぎた例を次に示します。

class Foo
  attr_accessor :bar
  def initialize
    @bar = []
  end
end

def some_method(foo)
  foo.bar << "a"
end

「新しい値をbarにプッシュする必要がある」というsome_methodの仕様を記述したいとします。それ、どうやったら出来るの?

foo = Foo.new
foo.should_receive(WHAT GOES HERE???).with("a")
some_method(foo)
4

2 に答える 2

3

なぜ何かを嘲笑するのですか?実際にテストしようとしているものから分離しようとしている依存関係である場合にのみ、何かをモックする必要があります。あなたの場合、呼び出しsome_methodの結果、渡したオブジェクトのプロパティに項目が追加されることを確認しようとしているようです。単純に直接テストできます。

foo = Foo.new
some_method(foo)
foo.bar.should == ["a"]

foo2 = Foo.new
foo2.bar = ["z", "q"]
some_method(foo2)
foo2.bar.should == ["z", "q", "a"]

# TODO: Cover situation when foo.bar is nil since it is available as attr_accessor 
# and can be set from outside of the instance

*以下のコメントの後に編集**

foo = Foo.new
bar = mock
foo.should_receive(:bar).and_return bar
bar.should_receive(:<<).with("a")
some_method(foo)
于 2012-11-19T05:24:01.970 に答える
2

ドキュメントの例: http://rubydoc.info/gems/rspec-mocks/frames

double.should_receive(:<<).with("illegal value").once.and_raise(ArgumentError)
于 2012-11-19T05:25:29.373 に答える