Question

class Foo
  def bar(a, b)
  ...

Foo.should_receive( :bar )

expects bar to be called with any arguments.

Foo.should_receive( :bar ).with( :baz, :qux )

expects :baz and :qux to be passed in as the params.

How to expect the first param to equal :baz, and not care about the other params?

Était-ce utile?

La solution

Use the anything matcher:

Foo.should_receive(:bar).with(:baz, anything)

Autres conseils

For Rspec 1.3 anything doesn't work when your method is receiving a hash as an argument, so please try with hash_including(:key => val):

Connectors::Scim::Preprocessors::Builder.
    should_receive(:build).
    with(
      hash_including(:connector => connector)
      ).
    and_return(preprocessor)
}

There's another way to do this, which is the block form of receive: https://relishapp.com/rspec/rspec-mocks/v/3-2/docs/configuring-responses/block-implementation#use-a-block-to-verify-arguments

expect(Foo).to receive(:bar) do |args|
  expect(args[0]).to eq(:baz)
end
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top