1

オブジェクトが特定のケースで最適化を使用しているかどうかをテストしたいと思います。だから私はこの種のコードを持っています

 class Bar
  attr_reader :n
  def initialize(n)
    @n=n
  end

  def a
    if @n <= 3
      b1
    else
      b2
    end
  end

  def b1
    @n+=1
  end

  def b2
    @n+=1 ##super fast addition
  end
end

私はそのようなrspecを書いてみます

bar=Bar.new(5)
allow(bar).to receive(:b2).and_call_original

bar.a
expect(bar).to receive(:b2).once
expect(bar.n).to eq 6

しかし、それは機能しません...それが可能か知っていますか? はいの場合、どのように?

4

1 に答える 1

4

メソッド呼び出しのreceiveに期待を置く必要があります。また、 andを 1 行にマージすることもできます。allowexpect

bar = Bar.new(5)
expect(bar).to receive(:b2).once.and_call_original
bar.a
expect(bar.n).to eq 6
于 2014-09-01T14:26:25.507 に答える