2

ブロックを受け取り、それを別のメソッドに委譲するメソッドがあります。本当に簡単です:

def self.build(&block)
  Builder.build(&block)
end

受信したブロックが新しいメソッドに渡されたことを RSpec (v3) でテストしてほしい。私のテストは現在次のようになっています:

describe ".build" do
  it "delegates to Builder" do
    block = -> {}
    expect(App::Builder).to receive(:build).with(&block)
    described_class.build(&block)
  end
end

しかし、RSpec は ArgumentError: `with` には少なくとも 1 つの引数が必要です。「no_args」マッチャーを使用して、引数を受け取らないという期待を設定します。特定のブロックでのメソッド呼び出しを期待するよう RSpec に依頼する方法はありますか?

4

1 に答える 1

2

特定のブロックが渡されたことをテストするために期待値を使用することはできません。コードを内部に追加することで、コードが実行されていることを確認できます。次に例を示します。

describe ".build" do
  it "delegates to Builder" do
    block_is = double('block')
    block = -> {
      block_is.run
    }

    expect(App::Builder).to receive(:build).and_yield
    expect(block_is).to receive(:run)

    described_class.build(&block)
  end
end
于 2014-11-21T06:30:10.883 に答える