4

次のテストを検討してください。

class A
  def print(args)
    puts args
  end
end

describe A do
  let(:a) {A.new}

  it "receives print" do
   a.should_receive(:print).with("World").and_call_original

   a.print("Hello")
   a.print("World")
 end
end

RSpec ドキュメントには次のように書かれています。

should_receive() を使用して、例が完了する前に受信者がメッセージを受信する必要があるという期待を設定します。

だから私はこのテストに合格することを期待していましたが、そうではありません。次のメッセージで失敗しています。

Failures:

1) A receives print
 Failure/Error: a.print("Hello")
   #<A:0x007feb46283190> received :print with unexpected arguments
     expected: ("World")
          got: ("Hello")

これは予想される動作ですか?このテストに合格する方法はありますか?

ruby 1.9.3p374rspec 2.13.1を使用しています

4

4 に答える 4

0

should_receive期待されるメソッドが呼び出されたことだけでなく、予期しないメソッドが呼び出されていないことを確認します。期待する各呼び出しの仕様を追加するだけです。

class A
  def print(args)
    puts args
  end
end

describe A do
  let(:a) {A.new}

  it "receives print" do
   a.should_receive(:print).with("World").and_call_original
   a.should_receive(:print).with("Hello").and_call_original

   a.print("Hello")
   a.print("World")
 end
end
于 2013-06-28T01:21:14.863 に答える